What is Dequeue?
The word dequeue is short form of double ended queue. In a dequeue , insertion as well as deletion can be carried out either at the rear end or the front end.
Check it : - Program of Stack [Push, Pop and Display]
Check it : - Program for Sorting an Array using Heap Sort
Program Code:-
#include<stdio.h>
#include<process.h>
#include<conio.h>
#define MAX 10
typedef struct dequeue
{
int data[MAX];
int rear,front;
}dequeue;
void initialize(dequeue *p);
int empty(dequeue *p);
int full(dequeue *p);
void enqueueR(dequeue *p,int x);
int dequeueR(dequeue *p);
void enqueueF(dequeue *p,int x);
int dequeueF(dequeue *p);
void print(dequeue *p);
main()
{
clrscr();
{
int i,x,op,n;
dequeue q;
initialize(&q);
while(1)
{
printf("\n\n\n Press 1 for Create");
printf("\n Press 2 for Insert at rear end");
printf("\n Press 3 for Insert at front end");
printf("\n Press 4 for Delete from rear end");
printf("\n Press 5 for Delete from front end");
printf("\n Press 6 to Print the Queue");
printf("\n Press 7 to Exit");
printf("\n\n\t Enter your choice : ");
scanf("%d",&op);
switch(op)
{
case 1:
printf("\n How many elements you want to enter : ");
scanf("%d",&n);
initialize(&q);
printf("\n Enter elements : ");
for(i=0;i<n;i++)
{
scanf("%d",&x);
if(full(&q))
{
printf("\n Queue is full...");
break;
}
enqueueR(&q,x);
}
break;
case 2:
printf("\n Enter element to insert : ");
scanf("%d",&x);
if(full(&q))
{
printf("\n Queue is full...");
break;
}
enqueueR(&q,x);
break;
case 3:
printf("\n Enter element to insert : ");
scanf("%d",&x);
if(full(&q))
{
printf("\n Queue is full...");
break;
}
enqueueF(&q,x);
break;
case 4:
if(empty(&q))
{
printf("\n Queue is empty...");
break;
}
x=dequeueR(&q);
printf("\n Deleted element is : %d",x);
break;
case 5:
if(empty(&q))
{
printf("\n Queue is empty...");
break;
}
x=dequeueF(&q);
printf("\n Deleted element is : %d",x);
break;
case 6:
print(&q);
break;
case 7:
exit(0);
break;
default:
printf("\n\t Wrong choice...");
break;
}
}
}
getch();
}
void initialize(dequeue *P)
{
P->rear=-1;
P->front=-1;
}
int empty(dequeue *P)
{
if(P->rear==-1)
return(1);
return(0);
}
int full(dequeue *P)
{
if((P->rear+1)%MAX==P->front)
return(1);
return(0);
}
void enqueueR(dequeue *P,int x)
{
if(empty(P))
{
P->rear=0;
P->front=0;
P->data[0]=x;
}
else
{
P->rear=(P->rear+1)%MAX;
P->data[P->rear]=x;
}
}
void enqueueF(dequeue *P,int x)
{
if(empty(P))
{
P->rear=0;
P->front=0;
P->data[0]=x;
}
else
{
P->front=(P->front-1+MAX)%MAX;
P->data[P->front]=x;
}
}
int dequeueF(dequeue *P)
{
int x;
x=P->data[P->front];
if(P->rear==P->front) //delete the last element
initialize(P);
else
P->front=(P->front+1)%MAX;
return(x);
}
int dequeueR(dequeue *P)
{
int x;
x=P->data[P->rear];
if(P->rear==P->front)
initialize(P);
else
P->rear=(P->rear-1+MAX)%MAX;
return(x);
}
void print(dequeue *P)
{
if(empty(P))
{
printf("\n Queue is empty...");
}
else
{
int i;
i=P->front;
while(i!=P->rear)
{
printf("\n %d ",P->data[i]);
i=(i+1)%MAX;
}
printf("\n %d \n",P->data[P->rear]);
}
}
Output

The word dequeue is short form of double ended queue. In a dequeue , insertion as well as deletion can be carried out either at the rear end or the front end.
Check it : - Program of Stack [Push, Pop and Display]
Check it : - Program for Sorting an Array using Heap Sort
Program Code:-
#include<stdio.h>
#include<process.h>
#include<conio.h>
#define MAX 10
typedef struct dequeue
{
int data[MAX];
int rear,front;
}dequeue;
void initialize(dequeue *p);
int empty(dequeue *p);
int full(dequeue *p);
void enqueueR(dequeue *p,int x);
int dequeueR(dequeue *p);
void enqueueF(dequeue *p,int x);
int dequeueF(dequeue *p);
void print(dequeue *p);
main()
{
clrscr();
{
int i,x,op,n;
dequeue q;
initialize(&q);
while(1)
{
printf("\n\n\n Press 1 for Create");
printf("\n Press 2 for Insert at rear end");
printf("\n Press 3 for Insert at front end");
printf("\n Press 4 for Delete from rear end");
printf("\n Press 5 for Delete from front end");
printf("\n Press 6 to Print the Queue");
printf("\n Press 7 to Exit");
printf("\n\n\t Enter your choice : ");
scanf("%d",&op);
switch(op)
{
case 1:
printf("\n How many elements you want to enter : ");
scanf("%d",&n);
initialize(&q);
printf("\n Enter elements : ");
for(i=0;i<n;i++)
{
scanf("%d",&x);
if(full(&q))
{
printf("\n Queue is full...");
break;
}
enqueueR(&q,x);
}
break;
case 2:
printf("\n Enter element to insert : ");
scanf("%d",&x);
if(full(&q))
{
printf("\n Queue is full...");
break;
}
enqueueR(&q,x);
break;
case 3:
printf("\n Enter element to insert : ");
scanf("%d",&x);
if(full(&q))
{
printf("\n Queue is full...");
break;
}
enqueueF(&q,x);
break;
case 4:
if(empty(&q))
{
printf("\n Queue is empty...");
break;
}
x=dequeueR(&q);
printf("\n Deleted element is : %d",x);
break;
case 5:
if(empty(&q))
{
printf("\n Queue is empty...");
break;
}
x=dequeueF(&q);
printf("\n Deleted element is : %d",x);
break;
case 6:
print(&q);
break;
case 7:
exit(0);
break;
default:
printf("\n\t Wrong choice...");
break;
}
}
}
getch();
}
void initialize(dequeue *P)
{
P->rear=-1;
P->front=-1;
}
int empty(dequeue *P)
{
if(P->rear==-1)
return(1);
return(0);
}
int full(dequeue *P)
{
if((P->rear+1)%MAX==P->front)
return(1);
return(0);
}
void enqueueR(dequeue *P,int x)
{
if(empty(P))
{
P->rear=0;
P->front=0;
P->data[0]=x;
}
else
{
P->rear=(P->rear+1)%MAX;
P->data[P->rear]=x;
}
}
void enqueueF(dequeue *P,int x)
{
if(empty(P))
{
P->rear=0;
P->front=0;
P->data[0]=x;
}
else
{
P->front=(P->front-1+MAX)%MAX;
P->data[P->front]=x;
}
}
int dequeueF(dequeue *P)
{
int x;
x=P->data[P->front];
if(P->rear==P->front) //delete the last element
initialize(P);
else
P->front=(P->front+1)%MAX;
return(x);
}
int dequeueR(dequeue *P)
{
int x;
x=P->data[P->rear];
if(P->rear==P->front)
initialize(P);
else
P->rear=(P->rear-1+MAX)%MAX;
return(x);
}
void print(dequeue *P)
{
if(empty(P))
{
printf("\n Queue is empty...");
}
else
{
int i;
i=P->front;
while(i!=P->rear)
{
printf("\n %d ",P->data[i]);
i=(i+1)%MAX;
}
printf("\n %d \n",P->data[P->rear]);
}
}
Output
No comments:
Post a Comment