Tuesday, 30 August 2016

Double Ended Queue using an array

Double Ended Queue using an array

#include<stdio.h>
#define MAX 5
int q[MAX];
int front = -1, rear= -1;

void insertAtRear(int item)
{
         if ( rear == MAX - 1 )
{
printf ( "\nDequeue is overflow" );
}
else
        {
                if(front==-1 &&rear==-1)
                           front=rear=0;
                else
                            rear=rear+1;
                q[rear] = item;
         }
}

void deleteAtFront()
{
           int item;
           if(front==-1)
                         printf("\nDequeue underflow");
           else
           {
                        item = q[front];
                        printf("\nItem deleted from queue is %d",item);
                        if(front == rear)  
                                    front = rear = -1;
                        else
                                    front = front+1;
            }
}

void insertAtFront(int item)
{
          int i;
          if( front == 0 && rear == MAX - 1 )
          {
                    printf ( "\nDequeue is overflow" ) ;
          }
          else
          {
                     if(front == -1 &&rear == -1)
                     {
                                 front = rear = 0;
                     }
                     else if(front == 0 && rear>=0)
                     {
                                for(i = rear; i>=front; i--)
                                              q[i+1] = q[i];
                                 rear = rear+1;
                      }
                      else if(front != 0)
                     {
                                 front = front - 1;
                     }
                     q[front]=item;
           }
}

void deleteAtRear()
{
            int item;
            if(front==-1)
                          printf("\nDequeue underflow");
            else
            {
                          item = q[rear];
                          printf("\nItem deleted from queue is %d", item);
                          if(front == rear)
                                      front = rear = -1;
                          else
                                      rear = rear-1 ;
            }
}

void display()
{
             int i;
             printf("\nfront  = %d  rear=%d", front, rear);
             if(front == -1)
             {
                         printf("\nEmpty");
                         return;
              }
              else
             {
                        printf("\nContents are: \n");
                        for(i=front; i<=rear; i++)
                                         printf("%d ", q[i]);
             }
}

void main()
{
     int ch, item;
    while(1)
    {
        printf("\n\n~~Menu~~");
        printf("\n1.Insert at front");
        printf("\n2.Delete from front");
        printf("\n3.Insert at rear");
        printf("\n4.Delete at rear");
        printf("\n5.Display");
        printf("\n6.Exit");
        printf("\nPlease enter a valid choice:");
        scanf("%d",&ch);
        switch(ch)
        {
            case 1: printf("\nEnter the item to be inserted:  ");
                    scanf("%d", &item);
                    insertAtFront(item);
                    display();
                    break;

            case 2: deleteAtFront();
                    display();
                    break;

            case 3: printf("\nEnter the item to be inserted:  ");
                    scanf("%d",&item);
                    insertAtRear(item);
                    display();
                    break;

            case 4: deleteAtRear();
                    display();
                    break;

            case 5: display();
                    break;
            case 6: exit(0);
            default: printf("\nEnter the valid choice:  ");
                    break;
        }
    }
}


Output

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:1

Enter the item to be inserted:  11

front  = 0  rear = 0
Contents are:
11

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:1

Enter the item to be inserted:  22

front  = 0  rear = 1
Contents are:
22     11

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:1

Enter the item to be inserted:  33

front  = 0  rear = 2
Contents are:
33      22       11

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:2

Item deleted from queue is 33

front  = 1  rear = 2
Contents are:
22      11

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:2

Item deleted from queue is 22

front  = 2  rear = 2
Contents are:
11

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:3

Enter the item to be inserted:  33

front  = 2  rear = 3
Contents are:
11    33

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:1

Enter the item to be inserted:  22

front  = 1  rear = 3
Contents are:
22    11    33

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:1

Enter the item to be inserted:  44

front  = 0  rear = 3
Contents are:
44     22      11      33

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:3

Enter the item to be inserted:  55

front  = 0  rear=4
Contents are:
44     22     11     33      55

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:3

Enter the item to be inserted:  77
Dequeue is overflow

front  = 0  rear=4
Contents are:
44     22     11      33      55

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:4

Item deleted from queue is 55

front  = 0  rear = 3
Contents are:
44    22     11    33

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:2

Item deleted from queue is 44

front  = 1  rear = 3
Contents are:
22    11     33

~~Menu~~
1.Insert at front
2.Delete from front
3.Insert at rear
4.Delete at rear
5.Display
6.Exit
Please enter a valid choice:6