Advertisement

C Program for Double Ended Circular Queue Using Array with DeQueue Data Structure

C Program for Double-Ended Circular Queue Using Array with DeQueue Data Structure

C Program for Double-Ended Circular Queue
#include<stdio.h>
#include<stdlib.h>
#define MAX 10

//declaration of Double-Ended Circular Queue Array Structure
typedef struct DoubleEndedQueueArray{
int arr[MAX];
int rear,front;
}DEQueue;

//function declarations
void insert_via_front(DEQueue*);
void insert_via_rear(DEQueue*);
void delete_via_front(DEQueue*);
void delete_via_rear(DEQueue*);
void display(DEQueue*);
void initialize(DEQueue*);

//starting of the main function
int main(){
DEQueue* dq = (DEQueue*)malloc(sizeof(DEQueue)); //creating a pointer variable of the doubly circular Queue structure
int a;
do{
printf("\n What do you want  to do with the Queue?\n");
printf("\n 0:Initialize \n 1:Insert Through Front \n 2:Insert Through Rear \n 3:Delete Through Front \n 4:Delete Through Rear \n 5:Display \n 6:Exit \n");
scanf("%d",&a);
switch(a){
case 0: initialize(dq);break;
case 1: insert_via_front(dq);break;
case 2: insert_via_rear(dq);break;
case 3: delete_via_front(dq);break;
case 4: delete_via_rear(dq);break;
case 5: display(dq);break;
            case 6: exit(0);
default: printf("Wrong Input!Try again:\n");
}
}while(1); //infinite loop for menu
return 0;
}

//Initialize function for eliminating the garbage values from the queue array
void initialize(DEQueue* dq){
int i;
for(i=0;i<MAX;i++){
dq->arr[i]=0;
}
dq->rear=dq->front=-1;
}

//Insert [through rear] integer data into queue
void insert_via_rear(DEQueue* dq){
if((dq->front==0&&dq->rear==MAX-1)||(dq->rear==dq->front-1)){
printf("DEQueue is overflowed,can't insert.");
}
else{
if(dq->front==-1&&dq->rear==-1)
dq->front=dq->rear=0;
else if(dq->rear==MAX-1)
dq->rear=0; //rear moves circular way
else
dq->rear++;
printf("Enter data:\n");
scanf("%d",&dq->arr[dq->rear]);
}
}

//Delete [through front] data from queue
void delete_via_front(DEQueue* dq){
if(dq->front==-1){
printf("Queue underflow,nothing to delete.");
}
else{
printf("Deleted:%d",dq->arr[dq->front]);
if(dq->front==MAX-1)
    dq->front=0; //front moves circular way
else if(dq->front==dq->rear)
dq->front=dq->rear=-1;
else
    dq->front++;
}
}

//Insert [through front] integer data into queue
void insert_via_front(DEQueue* dq){
if((dq->front==0&&dq->rear==MAX-1)||(dq->rear==dq->front-1)){
printf("DEQueue is overflowed,can't insert.");
}
else{
if(dq->front==-1&&dq->rear==-1)
dq->front=dq->rear=0;
else if(dq->front==0)
dq->front=MAX-1; //front moves circular way
else
dq->front--;
printf("Enter data:\n");
scanf("%d",&dq->arr[dq->front]);
}
}

//Delete [through rear] data from queue
void delete_via_rear(DEQueue* dq){
if(dq->rear==-1){
printf("Queue underflow,nothing to delete.");
}
else{
printf("Deleted:%d",dq->arr[dq->rear]);
if(dq->rear==0)
    dq->rear=MAX-1; //front moves circular way
else if(dq->front==dq->rear)
dq->front=dq->rear=-1;
else
    dq->rear--;
}
}

//Display the values of the queue
void display(DEQueue* dq){
if(dq->front==-1)
printf("Queue is empty,no items to be displayed.");
else{
int i,j;
printf("Queue elements are:\n");
if(dq->front<=dq->rear){
for(i=dq->front;i<=dq->rear;i++){
printf("%d\t",dq->arr[i]);
}
}
else{
for(i=dq->front;i<MAX;i++){
printf("%d\t",dq->arr[i]);
}
for(j=0;j<=dq->rear;j++){
printf("%d\t",dq->arr[j]);
}
}
}
}

Output:-
What do you want  to do with the Queue?

 0:Initialize 
 1:Insert Through Front 
 2:Insert Through Rear 
 3:Delete Through Front 
 4:Delete Through Rear 
 5:Display 
 6:Exit 
0

 What do you want  to do with the Queue?

 0:Initialize 
 1:Insert Through Front 
 2:Insert Through Rear 
 3:Delete Through Front 
 4:Delete Through Rear 
 5:Display 
 6:Exit 
2
Enter data:
4

 What do you want  to do with the Queue?

 0:Initialize 
 1:Insert Through Front 
 2:Insert Through Rear 
 3:Delete Through Front 
 4:Delete Through Rear 
 5:Display 
 6:Exit 
2
Enter data:
6

 What do you want  to do with the Queue?

 0:Initialize 
 1:Insert Through Front 
 2:Insert Through Rear 
 3:Delete Through Front 
 4:Delete Through Rear 
 5:Display 
 6:Exit 
2
Enter data:
8

 What do you want  to do with the Queue?

 0:Initialize 
 1:Insert Through Front 
 2:Insert Through Rear 
 3:Delete Through Front 
 4:Delete Through Rear 
 5:Display 
 6:Exit 
3
Deleted:4
 What do you want  to do with the Queue?

 0:Initialize 
 1:Insert Through Front 
 2:Insert Through Rear 
 3:Delete Through Front 
 4:Delete Through Rear 
 5:Display 
 6:Exit 
2
Enter data:
3

 What do you want  to do with the Queue?

 0:Initialize 
 1:Insert Through Front 
 2:Insert Through Rear 
 3:Delete Through Front 
 4:Delete Through Rear 
 5:Display 
 6:Exit 
2
Enter data:
8

 What do you want  to do with the Queue?

 0:Initialize 
 1:Insert Through Front 
 2:Insert Through Rear 
 3:Delete Through Front 
 4:Delete Through Rear 
 5:Display 
 6:Exit 
5
Queue elements are:
6       8       3       8
 What do you want  to do with the Queue?

 0:Initialize 
 1:Insert Through Front 
 2:Insert Through Rear 
 3:Delete Through Front 
 4:Delete Through Rear 
 5:Display 
 6:Exit 
1
Enter data:
4

 What do you want  to do with the Queue?

 0:Initialize 
 1:Insert Through Front 
 2:Insert Through Rear 
 3:Delete Through Front 
 4:Delete Through Rear 
 5:Display 
 6:Exit 
1
Enter data:
3

 What do you want  to do with the Queue?

 0:Initialize 
 1:Insert Through Front 
 2:Insert Through Rear 
 3:Delete Through Front 
 4:Delete Through Rear 
 5:Display 
 6:Exit 
5
Queue elements are:
3       4       6       8       3       8
 What do you want  to do with the Queue?

 0:Initialize 
 1:Insert Through Front 
 2:Insert Through Rear 
 3:Delete Through Front 
 4:Delete Through Rear 
 5:Display 
 6:Exit


Post a Comment

0 Comments