Double Ended Queue

The double ended queue is a queue in which insertion and deletion are performed from either both ends of the queue. This is called head-tail linked list, as an element can be added or removed from either the head and tail of the queue.

In dequeue, there are two pointers LEFT and RIGHT.

A dequeue can have two variations-

  • Input Restricted Dequeue- In this, insertion can be done only from one end and deletion can be done from both ends.
  • Output Restricted Dequeue- In this, deletion can be done only from one end and insertion can be done from both ends.

Data Structure Doubly Ended Queue



Doubly Ended Queue Program

#include 
#include 
#define MAX 30 

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

void create_dequeue(dequeue *p); 
int empty(dequeue *p); 
int full(dequeue *p); 
void insert_rear(dequeue *p,int x); 
void insert_front(dequeue *p,int x); 
int delete_front(dequeue *p); 
int delete_rear(dequeue *p); 
void print(dequeue *p); 

void main() 
{ 
    int i,x,y,che; 
    dequeue q;     
    create_dequeue(&q);     
    do 
    { 
	printf("\n Enter 1 to create double-ended queue");
	printf("\n Enter 2 to insert into queue [REAR]");
	printf("\n Enter 3 to insert into queue [FRONT]");
	printf("\n Enter 4 to delete from queue [REAR]");
	printf("\n Enter 5 to delete from queue [FRONT]");
	printf("\n Enter 6 to display all elements");
	printf("\n Enter 7 to exit");
	printf("\n----------------------");
	printf("\n Please Enter Your Choice: ");
	
        scanf("%d",&che); 
        
        switch(che) 
        { 
            case 1: printf("\nEnter number of elements:"); 
                    scanf("%d",&y); 
                    create_dequeue(&q); 
                    printf("\nEnter the data: ");                     
                    for(i=0;irear=-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 insert_rear(dequeue *P,int x) 
{ 
    if(empty(P)) 
    { 
        P->rear=0; 
        P->front=0; 
        P->data[0]=x; 
    } 
    else 
    { 
		if(full(P)) 
		{ 
			printf("\nQueue Overflow"); 
			exit(0); 
		}  
		else {
        P->rear=(P->rear+1)%MAX; 
        P->data[P->rear]=x; 
		}
    } 
}  
void insert_front(dequeue *P,int x) 
{ 
    if(empty(P)) 
    { 
        P->rear=0; 
        P->front=0; 
        P->data[0]=x; 
    } 
    else 
    { 	
		if(full(P)) 
		{ 
			printf("\nQueue Overflow"); 
			exit(0); 
		}  
		else {
			P->front=(P->front-1+MAX)%MAX; 
			P->data[P->front]=x; 
		}
    } 
}  
int delete_front(dequeue *P) 
{ 
	if(empty(P)) 
	{ 
		printf("\nEmpty Queue "); 
		exit(0); 
	}
    int x;     
    x=P->data[P->front];     
    if(P->rear==P->front)   
        create_dequeue(P); 
    else 
        P->front=(P->front+1)%MAX;     
    return(x); 
}   
int delete_rear(dequeue *P) 
{ 
	if(empty(P)) 
	{ 
		printf("\nEmpty Queue "); 
		exit(0); 
	}
    int x;     
    x=P->data[P->rear];     
    if(P->rear==P->front) 
        create_dequeue(P); 
    else 
        P->rear=(P->rear-1+MAX)%MAX;         
    return(x); 
}  
void print(dequeue *P) 
{ 
    if(empty(P)) 
    { 
        printf("\nEmpty Queue "); 
        exit(0); 
    }     
    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 of the above program:


 Enter 1 to create double-ended queue
 Enter 2 to insert into queue [REAR]
 Enter 3 to insert into queue [FRONT]
 Enter 4 to delete from queue [REAR]
 Enter 5 to delete from queue [FRONT]
 Enter 6 to display all elements
 Enter 7 to exit
----------------------
 Please Enter Your Choice: 1

Enter number of elements:5

Enter the data: 20
30
43
23
45

 Enter 1 to create double-ended queue
 Enter 2 to insert into queue [REAR]
 Enter 3 to insert into queue [FRONT]
 Enter 4 to delete from queue [REAR]
 Enter 5 to delete from queue [FRONT]
 Enter 6 to display all elements
 Enter 7 to exit
----------------------
 Please Enter Your Choice: 2

Insert Element : 55

 Enter 1 to create double-ended queue
 Enter 2 to insert into queue [REAR]
 Enter 3 to insert into queue [FRONT]
 Enter 4 to delete from queue [REAR]
 Enter 5 to delete from queue [FRONT]
 Enter 6 to display all elements
 Enter 7 to exit
----------------------
 Please Enter Your Choice: 3

Insert Element :87

 Enter 1 to create double-ended queue
 Enter 2 to insert into queue [REAR]
 Enter 3 to insert into queue [FRONT]
 Enter 4 to delete from queue [REAR]
 Enter 5 to delete from queue [FRONT]
 Enter 6 to display all elements
 Enter 7 to exit
----------------------
 Please Enter Your Choice: 6

87
20
30
43
23
45
55

 Enter 1 to create double-ended queue
 Enter 2 to insert into queue [REAR]
 Enter 3 to insert into queue [FRONT]
 Enter 4 to delete from queue [REAR]
 Enter 5 to delete from queue [FRONT]
 Enter 6 to display all elements
 Enter 7 to exit
----------------------
 Please Enter Your Choice: 4

 Deleted Element is 55

 Enter 1 to create double-ended queue
 Enter 2 to insert into queue [REAR]
 Enter 3 to insert into queue [FRONT]
 Enter 4 to delete from queue [REAR]
 Enter 5 to delete from queue [FRONT]
 Enter 6 to display all elements
 Enter 7 to exit
----------------------
 Please Enter Your Choice: 5

Deleted Element is 87

 Enter 1 to create double-ended queue
 Enter 2 to insert into queue [REAR]
 Enter 3 to insert into queue [FRONT]
 Enter 4 to delete from queue [REAR]
 Enter 5 to delete from queue [FRONT]
 Enter 6 to display all elements
 Enter 7 to exit
----------------------
 Please Enter Your Choice: 6

20
30
43
23
45

 Enter 1 to create double-ended queue
 Enter 2 to insert into queue [REAR]
 Enter 3 to insert into queue [FRONT]
 Enter 4 to delete from queue [REAR]
 Enter 5 to delete from queue [FRONT]
 Enter 6 to display all elements
 Enter 7 to exit
----------------------
 Please Enter Your Choice: 






Read more articles


General Knowledge



Learn Popular Language