#include<iostream>
#include<assert.h>
using namespace std;
template <class T>
class Queue
{
private:
int maxsize;
T *a;
int front,rear;
public:
Queue(int s=0):maxsize(s){a=new T[maxsize],front=rear=0;}
void EnQue(const T& x)
{
assert(!isfull());
rear=(rear+1)%maxsize;
a[rear]=x;
}
T *DeQue()
{
assert(!isempty());
front=(front+1)%maxsize;
return &a[front];
}
int isfull()
{
return (rear+1)%maxsize==front;
}
int isempty()
{
return front==rear;
}
~Queue()
{
delete []a;
}
void makeempty()
{
front=rear;
}
};
void main()
{
Queue<int> q(3);
cout<<q.isempty();
q.EnQue(8);
q.EnQue(7);
cout<<q.isfull();
cout<<*q.DeQue();
q.DeQue();
cout<<q.isempty();
}