Friday, 7 December 2012

Dequeue using circular array cpp program

Program to implement a dequeue using circular array .

#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>

const int MAX=10;

class queue
{private:
          int arr[MAX];
          int front,rear;
 public:
          queue(void);
          void addrear(int);
          void addfront(int);
          int delrear(void);
          int delfront(void);
          void display(void);
          int count(void);
};

queue::queue(void)
{        front=rear=-1;}

void queue::addfront(int item)
{        if((front==rear+1)||(front==1 && rear==MAX-1)||(rear==front-1))
          {        cout<<"\n Queue is full";
                   return;

          }
          if(front==-1)
                   front=rear=0;
          else
          if(front==0)
                   front=MAX-1;
          else
                   front--;
          arr[front]=item;
}

void queue::addrear(int item)
{        if((front==rear+1)||(front==1 && rear==MAX-1))
          {        cout<<"\nQueue is full";
                   return;
          }
          if(front==-1)
                   front=rear=0;
          else
                   if(rear==MAX-1)
                             rear=0;
                   else
                             rear++;
          arr[rear]=item;
}
int queue::delfront(void)
{        int data;
          if(front==-1)
          {        cout<<"\nQueue is empty";
                   return NULL;
          }
          data=arr[front];
          if(front==rear)
                   front=rear=-1;
          else
                   if(front==MAX-1)
                             front=0;
                   else
                             front++;
          return data;
}
int queue::delrear(void)
{        int data;
          if(front==-1)
          {        cout<<"\nQueue is empty";
                   return NULL;
          }
          data=arr[rear];
          if(front==rear)
                   front=rear=-1;
          else
                   if(rear==0)
                             rear=MAX-1;
                   else
                             rear--;
          return data;
}
void queue::display(void)
{        cout<<"(Front)";
          int i=front;
          if(i!=-1)
          {while(1)
           {       cout<<arr[i]<<" ";
                   if(i==rear)break;
                             if(i==MAX-1)
                                      i=0;
                             else
                                      i++;
           }
          }
          cout<<"(Rear)";
}

int queue::count(void)
{        int count=0;
          int i=front;
          if(i!=-1)
          {while(1)
              {    count++;
                   if(i==rear) break;
                    if(i==MAX-1)
                             i=0;
                   else
                             i++;
              }
          }
          return(count);
}
void main(void)
{        int c,num;
          char ch;
          queue q;
          while(1)
          {        clrscr();
                   cout<<"Perform the following operations in Dqueue"<<endl;
                   cout<<"------------------------------------------"<<endl;
                   cout<<"1.Insert elements at Front of Dqueue \n";
                   cout<<"2.Insert elements at Rear of Dqueue \n";
                   cout<<"3.Delete elements from Front of Dqueue \n";
                   cout<<"4.Delete elements from Rear of Dqueue \n";
                   cout<<"5.Display full content of Dqueue \n";
                   cout<<"6.Exit from Program \n";
                   do
                   {        cout<<"Select your choice(1:6)";
                              cin>>c;
                   }
                   while((c<1)||(c>6));
          if(c==6)exit(1);
          clrscr();
          switch(c)
          {case 1:
                   do
{        cout<<"Queue currently has"<<q.count()<<"                       elements"<<endl;
                             cout<<"Enter the new element:";
                             cin>>num;
                             q.addfront(num);
                             cout<<"Add more(Y/N):";
                             cin>>ch;
                    }
                   while((ch=='y')||(ch=='Y'));
                   break;
          case 2:
                    do
{        cout<<"Queue currently has"<<q.count()<<"   elements"<<endl;
                             cout<<"Enter the new element:";
                             cin>>num;
                             q.addrear(num);
                             cout<<"Add more(Y/N):";
                             cin>>ch;
                   }
                   while((ch=='y')||(ch=='Y'));
                   break;
case 3:
                   do
{        cout<<"Queue currently has"<<q.count()<<" elements"<<endl;
                             if((num=q.delfront())!=NULL)
                             cout<<"The deleted element is:"<<num<<endl;
                             cout<<"Current Queue is ";
                             q.display();
                             cout<<"Delete more(Y/N):";
                             cin>>ch;
                   }
                   while((ch=='y')||(ch=='Y'));
                   break;
          case 4:
                   do
{        cout<<"Queue currently has"<<q.count()<<" elements"<<endl;
                             if((num=q.delrear())!=NULL)
                             cout<<"The deleted element is:"<<num<<endl;
                             cout<<"Current Queue is ";
                             q.display();
                             cout<<"Delete more(Y/N):";
                             cin>>ch;
                   }
                   while((ch=='y')||(ch=='Y'));
                   break;
          case 5:
cout<<"Queue currently has "<<q.count()<<" elements as shown below"<<endl;
                   q.display();
                   break;
          }
           cout<<endl<<"Press any key to continue...";
          getch();
    }
}

No comments:

Post a Comment