Program to implement Dequeue (Double Ended Queues) using Arrays with front always at zero

Double Ended Queues (Dequeue)

Program to implement Dequeue (Double Ended Queues) using Arrays with front always at zero

/*Implementation of De-queue using arrays*/

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>

#define MAX 10

typedef struct dequeue
{int front,rear;
int arr[MAX];
}dq;

/*If flag is zero, insertion is done at beginning
else if flag is one, insertion is done at end.
*/
void enqueue(dq *q,int x,int flag)
{
int i;
if(q->rear==MAX-1)
{printf(“nQueue overflow!”);
exit(1);
}
if(flag==0)
{for(i=q->rear;i>=q->front;i–)
q->arr[i+1]=q->arr[i];
q->arr[q->front]=x;
q->rear++;
}
else if(flag==1)
{q->arr[++q->rear]=x;
}
else
{printf(“nInvalid flag value…!”);
return;
}
}

void de_queue(dq *q,int flag)
{int i;
/*front is initialized with zero, then rear=-1
indicates underflow*/
if(q->rear<q->front)
{printf(“nQueue Underflow…!”);
exit(1);
}
if(flag==0)/*deletion at beginning*/
{for(i=q->front;i<=q->rear;i++)
q->arr[i]=q->arr[i+1];
q->arr[q->rear]=0;
q->rear–;
}
else if(flag==1)
{q->arr[q->rear–]=0;
}
else
{printf(“nInvalid flag value…!”);
return;
}
}

void display(dq *q)
{
int i;
for(i=q->front;i<=q->rear;i++)
printf(“%dt”,q->arr[i]);
}

void main()
{
dq q;
q.front=0;
q.rear=-1;
int ch,num;
while(1)
{
clrscr();
printf(“nMenu-Double Ended Queue”);
printf(“nn1. Enqueue – Begin”);
printf(“n2. Enqueue – End”);
printf(“n3. Dequeue – Begin”);
printf(“n4. Dequeue – End”);
printf(“n5. Display”);
printf(“n6. Exit”);
printf(“nnEnter your choice?”);
scanf(“%d”,&ch);
switch(ch)
{
case 1:
printf(“nEnter the number?”);
scanf(“%d”,&num);
enqueue(&q,num,0);
break;
case 2:
printf(“nEnter the number?”);
scanf(“%d”,&num);
enqueue(&q,num,1);
break;
case 3:
printf(“nDeleting element from beginning…!”);
de_queue(&q,0);
break;
case 4:
printf(“nDeleting element from end…!”);
de_queue(&q,1);
break;
case 5:
display(&q);
break;
case 6:
exit(0);
default:
printf(“nInvalid Choice…!”);
}
getch();
}
}