C++ program to implement circular queue using array

Share on FacebookTweet about this on TwitterDigg thisPin on PinterestShare on LinkedInShare on StumbleUponShare on TumblrShare on Google+Email this to someone
#include <iostream.h>
class cqueue
{
	private :
		int *arr ;
		int front, rear ;
		int MAX;
	public :
		cqueue( int maxsize = 10 ) ;
		void addq ( int item ) ;
		int delq( ) ;
		void display( ) ;
} ;
cqueue :: cqueue( int maxsize )
{
	MAX = maxsize ;
	arr = new int [ MAX ];
	front = rear = -1 ;
	for ( int i = 0 ; i < MAX ; i++ )
		arr[i] = 0 ;
}
void cqueue :: addq ( int item )
{
	if ( ( rear + 1 ) % MAX == front )
	{
		cout << "\nQueue is full" ;
		return ;
	}
	rear = ( rear + 1 ) % MAX;
	arr[rear] = item ;
	if ( front == -1 )
		front = 0 ;
}
int cqueue :: delq( )
{
	int data ;
	if ( front == -1 )
	{
		cout << "\nQueue is empty" ;
		return NULL ;
	}
 
	data = arr[front] ;
	arr[front] = 0 ;
	if ( front == rear )
	{
		front = -1 ;
		rear = -1 ;
	}
	else
		front = ( front + 1 ) % MAX;
	return data ;
}
void cqueue :: display( )
{
	cout << endl ;
	for ( int i = 0 ; i < MAX ; i++ )
		cout << arr[i] << "  " ;
	cout << endl ;
}
void main( )
{
	cqueue a ( 10 ) ;
	a.addq ( 14 ) ;
	a.addq ( 22 ) ;
	a.addq ( 13 ) ;
	a.addq ( -6 ) ;
	a.addq ( 25 ) ;
	cout << "\nElements in the circular queue: " ;
	a.display( ) ;
	int i = a.delq( ) ;
	cout << "Item deleted: " << i ;
	i = a.delq( ) ;
	cout << "\nItem deleted: " << i ;
	cout << "\nElements in the circular queue after deletion: " ;
	a.display( ) ;
	a.addq ( 21 ) ;
	a.addq ( 17 ) ;
	a.addq ( 18 ) ;
	a.addq ( 9 ) ;
	a.addq ( 20 ) ;
	cout << "Elements in the circular queue after addition: " ;
	a.display( ) ;
	a.addq ( 32 ) ;
	cout << "Elements in the circular queue after addition: " ;
	a.display( ) ;
}

Share on FacebookTweet about this on TwitterDigg thisPin on PinterestShare on LinkedInShare on StumbleUponShare on TumblrShare on Google+Email this to someone

8 Responses to “C++ program to implement circular queue using array”

  1. there is no ‘queue is full’ concept in circular buffer. you need to modify ur code to rollover the rear piinter.

    Reply
  2. nehemiah

    @ Dummy….Not necessary pal…There are many ways to look at it..
    If you ask me I will write 3 methods or one method with three modes

    - Enqueue Soft – Just tries to add element, fails if the queue is full
    - Enqueue Hard – Somehow adds the element by allocating extra memory
    - Enqueue Forced – This is what you are talking about, It simply adds the element by dropping the first element(dequeued)

    Reply
  3. nehemiah

    @ Author…Why don’t you templatize this program so that it can take any type of elements?

    Reply
  4. /*
    * C++ Program to Implement Circular Queue
    */
    #include
    #define MAX 5
    using namespace std;
    /*
    * Class Circular Queue
    */
    class Circular_Queue
    {
    private:
    int *cqueue_arr;
    int front, rear;
    public:
    Circular_Queue()
    {
    cqueue_arr = new int [MAX];
    rear = front = -1;
    }
    /*
    * Insert into Circular Queue
    */
    void insert(int item)
    {
    if ((front == 0 && rear == MAX-1) || (front == rear+1))
    {
    cout<<"Queue Overflow \n";
    return;
    }
    if (front == -1)
    {
    front = 0;
    rear = 0;
    }
    else
    {
    if (rear == MAX – 1)
    rear = 0;
    else
    rear = rear + 1;
    }
    cqueue_arr[rear] = item ;
    }
    /*
    * Delete from Circular Queue
    */
    void del()
    {
    if (front == -1)
    {
    cout<<"Queue Underflow\n";
    return ;
    }
    cout<<"Element deleted from queue is : "<<cqueue_arr[front]<<endl;
    if (front == rear)
    {
    front = -1;
    rear = -1;
    }
    else
    {
    if (front == MAX – 1)
    front = 0;
    else
    front = front + 1;
    }
    }
    /*
    * Display Circular Queue
    */
    void display()
    {
    int front_pos = front, rear_pos = rear;
    if (front == -1)
    {
    cout<<"Queue is empty\n";
    return;
    }
    cout<<"Queue elements :\n";
    if (front_pos <= rear_pos)
    {
    while (front_pos <= rear_pos)
    {
    cout<<cqueue_arr[front_pos]<<" ";
    front_pos++;
    }
    }
    else
    {
    while (front_pos <= MAX – 1)
    {
    cout<<cqueue_arr[front_pos]<<" ";
    front_pos++;
    }
    front_pos = 0;
    while (front_pos <= rear_pos)
    {
    cout<<cqueue_arr[front_pos]<<" ";
    front_pos++;
    }
    }
    cout<<endl;
    }
    };
    /*
    * Main
    */
    int main()
    {
    int choice, item;
    Circular_Queue cq;
    do
    {
    cout<<"1.Insert\n";
    cout<<"2.Delete\n";
    cout<<"3.Display\n";
    cout<<"4.Quit\n";
    cout<>choice;
    switch(choice)
    {
    case 1:
    cout<>item;
    cq.insert(item);
    break;
    case 2:
    cq.del();
    break;
    case 3:
    cq.display();
    break;
    case 4:
    break;
    default:
    cout<<"Wrong choice\n";
    }/*End of switch*/
    }
    while(choice != 4);
    return 0;
    }

    Reply

Leave a Reply