C Program to implement Double Ended Queue (Deque)

/* DOUBLE ENDED QUEUE */

#include<stdio.h>
#include<conio.h>
#define MAX 10

int deque[MAX];
int left=-1, right=-1;

void insert_right(void);
void insert_left(void);
void delete_right(void);
void delete_left(void);
void display(void);

int main()
{
 int choice;
 clrscr();
 do
 {
  printf("\n1.Insert at right ");
  printf("\n2.Insert at left ");
  printf("\n3.Delete from right ");
  printf("\n4.Delete from left ");
  printf("\n5.Display ");
  printf("\n6.Exit");
  printf("\n\nEnter your choice ");
  scanf("%d",&choice);
  switch(choice)
  {
   case 1:
    insert_right();
    break;
   case 2:
    insert_left();
    break;
   case 3:
    delete_right();
    break;
   case 4:
    delete_left();
    break;
   case 5:
    display();
    break;
  }
 }while(choice!=6);
 getch();
 return 0;
}


//-------INSERT AT RIGHT-------
void insert_right()
{
 int val;
 printf("\nEnter the value to be added ");
 scanf("%d",&val);
 if( (left==0 && right==MAX-1) || (left==right+1) )
 {
  printf("\nOVERFLOW");
 }
 if(left==-1)        //if queue is initially empty
 {
  left=0;
  right=0;
 }
 else
 {
  if(right==MAX-1)
   right=0;
  else
   right=right+1;
 }
 deque[right]=val;
}


//-------INSERT AT LEFT-------
void insert_left()
{
 int val;
 printf("\nEnter the value to be added ");
 scanf("%d",&val);
 if( (left==0 && right==MAX-1) || (left==right+1) )
 {
  printf("\nOVERFLOW");
 }
 if(left==-1)        //if queue is initially empty
 {
  left=0;
  right=0;
 }
 else
 {
  if(left==0)
   left=MAX-1;
  else
   left=left-1;
 }
 deque[left]=val;
}


//-------DELETE FROM RIGHT-------
void delete_right()
{
 if(left==-1)
 {
  printf("\nUNDERFLOW");
  return;
 }
 printf("\nThe deleted element is %d\n", deque[right]);
 if(left==right)          //Queue has only one element
 {
  left=-1;
  right=-1;
 }
 else
 {
  if(right==0)
   right=MAX-1;
  else
   right=right-1;
 }
}


//-------DELETE FROM LEFT-------
void delete_left()
{
 if(left==-1)
 {
  printf("\nUNDERFLOW");
  return;
 }
 printf("\nThe deleted element is %d\n", deque[left]);
 if(left==right)          //Queue has only one element
 {
  left=-1;
  right=-1;
 }
 else
 {
  if(left==MAX-1)
   left=0;
  else
   left=left+1;
 }
}


//-------DISPLAY-------
void display()
{
 int front=left, rear=right;
 if(front==-1)
 {
  printf("\nQueue is Empty\n");
  return;
 }
 printf("\nThe elements in the queue are: ");
 if(front<=rear)
 {
  while(front<=rear)
  {
   printf("%d\t",deque[front]);
   front++;
  }
 }
 else
 {
  while(front<=MAX-1)
  {
   printf("%d\t",deque[front]);
   front++;
  }
  front=0;
  while(front<=rear)
  {
   printf("%d\t",deque[front]);
   front++;
  }
 }
 printf("\n");
}


/* OUTPUT

1.Insert at right
2.Insert at left
3.Delete from right
4.Delete from left
5.Display
6.Exit

Enter your choice 1

Enter the value to be added 5

1.Insert at right
2.Insert at left
3.Delete from right
4.Delete from left
5.Display
6.Exit

Enter your choice 2

Enter the value to be added 6

1.Insert at right
2.Insert at left
3.Delete from right
4.Delete from left
5.Display
6.Exit

Enter your choice 2

Enter the value to be added 7

1.Insert at right
2.Insert at left
3.Delete from right
4.Delete from left
5.Display
6.Exit

Enter your choice 5

The elements in the queue are: 7        6       5

1.Insert at right
2.Insert at left
3.Delete from right
4.Delete from left
5.Display
6.Exit

Enter your choice 3

The deleted element is 5

1.Insert at right
2.Insert at left
3.Delete from right
4.Delete from left
5.Display
6.Exit

Enter your choice 5

The elements in the queue are: 7        6

1.Insert at right
2.Insert at left
3.Delete from right
4.Delete from left
5.Display
6.Exit

Enter your choice 4

The deleted element is 7

1.Insert at right
2.Insert at left
3.Delete from right
4.Delete from left
5.Display
6.Exit

Enter your choice 5

The elements in the queue are: 6

1.Insert at right
2.Insert at left
3.Delete from right
4.Delete from left
5.Display
6.Exit

Enter your choice 3

The deleted element is 6

1.Insert at right
2.Insert at left
3.Delete from right
4.Delete from left
5.Display
6.Exit

Enter your choice 5

Queue is Empty

1.Insert at right
2.Insert at left
3.Delete from right
4.Delete from left
5.Display
6.Exit

Enter your choice 6        */

Comments

Post a Comment