Double Ended Queue
Algorithm : Deque
Let us consider a double ended Queue,DQ with front and rear.
Insert in the front,delete from the front,insert in the rear,
delete from the rear all these operations are done in DQ.This
algorithm helps us to perform these operations.
Initially,
front=-1,rear=-1
Insertrear(DQ[1..N],front,rear,item)
{
if(front=(rear+1)%N) //checks if the dequeue is full
{
print "Queue frontull."
}
else
{
rear=(rear+1)%N;
DQ[rear]=item //element is inserted in rear side
if(front=-1) //if front is -1 then front is initialized to 0
{
front=0
}
}
}
Deletefront(DQ[1..N],front,rear)
{
if(front=-1) //checks if dequeue is empty
{
print "Queue empty."
}
else
{
item=DQ[front]
if(front=rear) //if front and rear is equal then they
{ both are initialized to -1
front=-1
rear=-1
}
else
{
front=(front+1)%N //front is incremented and the element
} in front deleted
}
return item
}
Insertfront(DQ[1..N],front,rear,item)
{
if(front=0)
{
next=N-1
front=next
DQ[front]=item
}
else if(front=-1) //checks if dequeue is empty
{
next=0
front=next
DQ[front]=item //item is inserted in the 1st position
}
else
{
next=front-1
if(next=rear) //checks if next reachs rear
{
print " Deque full."
}
else
{
front=next
DQ[front]=item
}
}
}
Deleterear(DQ[1..N],front,rear)
{
if(front=-1) //checks if the deque is empty
{
print " DEQUE empty."
}
else
{
item=DQ[r]
if(front=rear) //checks if there is only 1 element
{ present in the deque
front=rear=-1 //then front and rear both are initialized to -1
}
else if(rear=0)
rear=N-1
else
rear=rear-1
}
return item
}
C Program For Double-ended-queue
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int DQ[5],f=-1,r=-1;
void insertrear(int item)
{
if(f==(r+1)%5)
{
printf("\nQueue full.");
}
else
{
r=(r+1)%5;
DQ[r]=item;
if(f==-1)
{
f=0;
}
}
}
int deletefront()
{
int item;
if(f==-1)
{
printf("\nQueue empty.");
}
else
{
item=DQ[f];
if(f==r)
{
f=-1;
r=-1;
}
else
{
f=(f+1)%5;
}
}
return item;
}
void insertfront(int item)
{
int next;
if(f==0)
{
next=4;
f=next;
DQ[f]=item;
}
else if(f==-1)
{
next=0;
f=next;
DQ[f]=item;
}
else
{
next=f-1;
if(next==r)
{
printf("\nDeque full.");
}
else
{
f=next;
DQ[f]=item;
}
}
}
int deleterear()
{
int item;
if(f==-1)
{
printf("\nDEQUE empty.");
}
else
{
item=DQ[r];
if(f==r)
{
f=-1;
r=-1;
}
else if(r==0)
{
r=4;
}
else
{
r=r-1;
}
}
return item;
}
void show()
{
int i=0;
if(f==-1 || f==(r+1)%5)
{
printf("\nQueue empty.");
}
else
{
printf("\nThe elements of the Queue are:");
if(f=f && i<=r)
printf("\t%d",DQ[i]);
else
printf("\t_");
}
}
else if(f==r)
{
for(i=0;i<=4;i++)
{
if(i==f)
printf("\t%d",DQ[i]);
else
printf("\t_");
}
}
else
{
for(i=0;i<=4;i++)
{
if(i<=r)
printf("\t%d",DQ[i]);
else if(i>r && i %d",item);
}
break;
case 3:
printf("\nEnter item:");
scanf("%d",&item);
insertfront(item);
break;
case 4:
item=deleterear();
if(f!=-1)
{
printf("\nThe popped item is-> %d",item);
}
break;
case 5:
show();
break;
case 6:
exit(0);
}
}
}
OUTPUT :
1.insertrear
2.deletefront
3.insertfront
4.deleterear
5.Show
6.Exit
Enter your choice:1
Enter item:11
1.insertrear
2.deletefront
3.insertfront
4.deleterear
5.Show
6.Exit
Enter your choice:1
Enter item:22
1.insertrear
2.deletefront
3.insertfront
4.deleterear
5.Show
6.Exit
Enter your choice:3
Enter item:55
1.insertrear
2.deletefront
3.insertfront
4.deleterear
5.Show
6.Exit
Enter your choice:3
Enter item:44
1.insertrear
2.deletefront
3.insertfront
4.deleterear
5.Show
6.Exit
Enter your choice:5
The elements of the Queue are: 11 22 _ 44 55
1.insertrear
2.deletefront
3.insertfront
4.deleterear
5.Show
6.Exit
Enter your choice:2
The popped item is-> 44
1.insertrear
2.deletefront
3.insertfront
4.deleterear
5.Show
6.Exit
Enter your choice:5
The elements of the Queue are: 11 22 _ _ 55
1.insertrear
2.deletefront
3.insertfront
4.deleterear
5.Show
6.Exit
Enter your choice:4
The popped item is-> 22
1.insertrear
2.deletefront
3.insertfront
4.deleterear
5.Show
6.Exit
Enter your choice:5
The elements of the Queue are: 11 _ _ _ 55
1.insertrear
2.deletefront
3.insertfront
4.deleterear
5.Show
6.Exit
Enter your choice:4
The popped item is-> 11
1.insertrear
2.deletefront
3.insertfront
4.deleterear
5.Show
6.Exit
Enter your choice:2
1.insertrear
2.deletefront
3.insertfront
4.deleterear
5.Show
6.Exit
Enter your choice:2
Queue empty.
Tags:
Stack & Queue
0 comments