#include <iostream.h>
#include <assert.h>
template <class T>
class Queue
{ //循环队列的类定义
public:
Queue (int=10);
~Queue () { delete [ ] elements; }
void EnQueue( T & item );
T DeQueue();
T GetFront();
void MakeEmpty() { length = 0; } //置空队列
int IsEmpty() const { return length == 0; } //判队列空否
int IsFull() const { return length == maxSize; } //判队列满否
private:
int rear, length; //队尾指针和队列长度
T *elements; //存放队列元素的数组
int maxSize; //队列最大可容纳元素个数
};
// 构造函数
template <class T>
Queue<T>:: Queue (int sz)
{
//建立一个最大具有maxSize个元素的空队列。
rear = maxSize - 1;
length = 0;
maxSize = sz;
elements = new T[maxSize]; //创建队列空间
assert (elements != 0); //断言: 动态存储分配成功与否
}
// 插入函数
template<class T>
void Queue<T> :: EnQueue ( T &item)
{
assert (!IsFull()); //判队列是否不满,满则出错处理
length++; //长度加1
rear = ( rear +1) % maxSize; //队尾位置进1
elements[rear] = item; //进队列
}
// 删除函数
template<class T>
T Queue<T> :: DeQueue ()
{
assert (!IsEmpty()); //判断队列是否不空,空则出错处理
length--; //队列长度减1
return elements[(rear-length+maxSize) % maxSize]; //返回原队头元素值
}
// 读取队头元素值函数
template<class T>
T Queue<T> :: GetFront ()
{
assert (!IsEmpty ());
return elements[(rear-length+1+maxSize) % maxSize]; //返回队头元素值
}
void main()
{
Queue<int> aQueue;
int i = 1;
aQueue.EnQueue(i);
i++;
aQueue.EnQueue(i);
i++;
aQueue.EnQueue(i);
aQueue.DeQueue();
cout << aQueue.GetFront() << endl;
}