//Circular Queue
class QueueCircular
{   int a[];
    int front, rear;
    QueueCircular(int size)
    {   a=new int[size];
        front=-1;
        rear=-1;
    }
    public void insert(int value)
    {   if(front==0 && rear==a.length-1 || front==rear+1)
        {   System.out.println("Overflow");
            return;
        }
        else if(front==-1)
            front=rear=0;
        else if(rear==a.length-1)
            rear=0;
        else
            rear++;
        a[rear]=value;
    }//insert()
    public int delete()
    {   if(front==-1)
        {   System.out.println("Underflow");
            return 0; //or return an error code like -999
        }
        else
        {   int temp=a[front];
            if(front==rear)
                reset();
            else if(front==a.length-1)
                front=0;
            else
                front++;
            return temp;
        }
    }//delete()

    private void reset()
    {   front=-1;
        rear=-1;
    }
    public void traverse()
    {   for(int i=front; ; i++)
        {   if(i==a.length)
            {   i=0;
            }
            System.out.print(a[i]+" ");
            if(i==rear)
            {   break;
            }
        }
        System.out.println();
    }
    public static void main(String args[])
    {   QueueCircular cq=new QueueCircular(5);
        cq.insert(1);
        cq.insert(2);
        cq.insert(3);
        cq.insert(4);
        cq.insert(5);
        cq.insert(6);
        cq.traverse();
        cq.delete();
        cq.delete();
        cq.delete();
        cq.insert(6);
        cq.insert(7);
        cq.traverse();
    }//main
}//class
/*
OUTPUT
Overflow
1 2 3 4 5
4 5 6 7
*/

