/* Implementation of
queue and few basic operations!*/
#include<stdio.h>
#include<stdlib.h>
#define
MAXSIZE 100
#define
TRUE 1
#define
FALSE 0
struct
queue{
int front;
int rear;
int items[MAXSIZE];
};
struct
stack{
int top;
int items[MAXSIZE];
};
struct
stack stk;
struct
queue p,q,temp;
int
pop(struct stack *);
int
remove(struct queue *);
int
Isempty(struct queue *);
void
push(struct stack *,int);
int
isempty_st(struct stack *);
void
insert(struct queue *,int);
void
reverse_queue(struct queue *);
void
display_front_rear(struct queue *);
void
display_rear_front(struct queue *);
void
append(struct queue *,struct queue *);
void
replace(struct queue *,int,int);
void
display_front_rear_unchanged(struct queue *);
void
display_rear_front_unchanged(struct queue *);
int
main()
{
int choice,x,ins,e;
stk.top=-1;
p.front=p.rear=MAXSIZE-1;
q.front=q.rear=MAXSIZE-1;
temp.front=temp.rear=MAXSIZE-1;
do
{
printf("\n Press 1
to add elements in Queue:");
printf("\n Press 2
to remove elements from Queue:");
printf("\n Press 3
to append queue Q at the end of queue P:");
printf("\n Press 4
to print elements of queue P from front to end with P becoming empty:");
printf("\n Press 5
to print elements of queue P from rear to front with P becoming empty:");
printf("\n Press 6
to print elements of queue P from front to end with P remaining same:");
printf("\n Press 7
to print elements of queue P from rear to front with P remaining same:");
printf("\n Press 8
to reverse the queue P:");
printf("\n Press 9
to replace a specific element of a queue:");
printf("\n Type 10
to exit:");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("\n
Enter 1 to insert in queue P, 2 to insert in queue Q:");
scanf("%d",&x);
switch(x)
{
case
1:
printf("\n
Enter the element to be inserted:");
scanf("%d",&ins);
insert(&p,ins);
break;
case
2:
printf("\n
Enter the element to be inserted:");
scanf("%d",&ins);
insert(&q,ins);
break;
}
break;
case 2:
printf("\n
Enter 1 to remove in queue P, 2 to remove in queue Q:");
scanf("%d",&x);
switch(x)
{
case
1:
printf("\n
Element removed is: %d\n",remove(&p));
break;
case
2:
printf("\n
Element removed is: %d\n",remove(&p));
break;
}
break;
case 3:
append(&p,&q);
break;
case 4:
display_front_rear(&p);
break;
case 5:
display_rear_front(&p);
break;
case 6:
display_front_rear_unchanged(&p);
break;
case 7:
display_rear_front_unchanged(&p);
break;
case 8:
reverse_queue(&p);
break;
case 9:
printf("\n
Enter the element to be replaced:");
scanf("%d",&e);
printf("\n
Enter the element to be placed:");
scanf("%d",&x);
replace(&p,e,x);
break;
}
}while(choice>=1
&& choice<=9);
return
0;
}
void
replace(struct queue *p,int e,int x)
{
int y;
while(!Isempty(p))
{
y=remove(p);
if(y==e)
insert(&temp,x);
else
insert(&temp,y);
}
printf("\n Elements of the
queue after replacing\n");
while(!Isempty(&temp))
{
x=remove(&temp);
printf("%d
",x);
insert(p,x);
}
}
void
reverse_queue(struct queue *p)
{
int x;
while(!Isempty(p))
{
x=remove(p);
push(&stk,x);
}
printf("\n Elements of the
queue (after reversing)\n");
while(!isempty_st(&stk))
{
x=pop(&stk);
printf("%d
",x);
insert(p,x);
}
}
void
display_rear_front_unchanged(struct queue *p)
{
int x;
while(!Isempty(p))
{
x=remove(p);
push(&stk,x);
insert(&temp,x);
}
printf("\n Elements of the
queue (rear to front)\n");
while(!isempty_st(&stk))
{
printf("%d
",pop(&stk));
x=remove(&temp);
insert(p,x);
}
}
void
display_front_rear_unchanged(struct queue *p)
{
int x;
while(!Isempty(p))
insert(&temp,remove(p));
printf("\n Elements of the
queue (front to rear)\n");
while(!Isempty(&temp))
{
x=remove(&temp);
printf("%d
",x);
insert(p,x);
}
}
void
display_rear_front(struct queue *p)
{
while(!Isempty(p))
push(&stk,remove(p));
printf("\n Elements of the
queue (rear to front)\n");
while(!isempty_st(&stk))
printf("%d
",pop(&stk));
}
int
isempty_st(struct stack *stk)
{
return((stk->top==-1)?TRUE:FALSE);
}
int
pop(struct stack *stk)
{
return(stk->items[(stk->top)--]);
}
void
push(struct stack *stk,int x)
{
stk->items[++stk->top]=x;
}
void
display_front_rear(struct queue *q)
{
printf("\n Elements of the
queue (front to end)\n");
while(!Isempty(q))
printf("%d
",remove(q));
}
void
append(struct queue *p, struct queue *q)
{
while(!Isempty(q))
insert(p,remove(q));
printf("\n
Appended........\n");
}
int
remove(struct queue *q)
{
if(Isempty(q))
{
printf("\n
Queue underflow:");
exit(1);
}
if(q->front==MAXSIZE-1)
q->front=0;
else
(q->front)++;
return(q->items[q->front]);
}
int
Isempty(struct queue *q)
{
return((q->front==q->rear)?TRUE:FALSE);
}
void
insert(struct queue *q,int x)
{
if(q->rear==MAXSIZE-1)
q->rear=0;
else
(q->rear)++;
if(q->front==q->rear)
printf("\n Queue
Overflow...:");
q->items[q->rear]=x;
return;
}
No comments:
Post a Comment