template <class T>
class CirQueue {
public:
CirQueue(int size) {
elements = new T[size];
MaxSize = size;
front = 0;
tail = 0;
}
~CirQueue()
{
delete[]elements;
}
bool IsFull() {
if ((tail+1) % MaxSize == front) {
cout << "队列已满!" << endl;
return 1;
}
return 0;
}
bool IsEmpty() {
if (front == tail) {
cout << "队列已空!" << endl;
return 1;
}
return 0;
}
int length() {
return (tail-front+MaxSize)%MaxSize;
}
void pop() {
if (IsEmpty())
return;
++front;
front %= MaxSize;
}
void push(T a) {
if (IsFull())
return;
elements[tail] = a;
++tail;
tail = tail % MaxSize;
}
T top() {
if (IsEmpty())
return -1;
return elements[front];
}
void clear() {
front = 0;
tail = 0;
}
private:
T* elements;
int front,tail;
int MaxSize;
};