const int QueueSize = 100;
template<class T>
class CirQueue{
public:
CirQueue();
~CirQueue();
void EnQueue(T x);
T DeQueue();
T GetHead();
int Empty();
private:
T data[QueueSize];
int front,rear;
};
构造函数
初始化一个空的循环队列只需要将队头front和队尾rear同时指向数组的某一个位置,一般是数组的高端,即front=rear=QueueSize-1;
template<class T>
CirQueue<T>::CirQueue(){
front=rear=QueueSize-1;
}
析构函数
因为循环队列是静态存储分配的,在循环队列变量退出作用域时自动释放所占的内存单元,因此,循环队列无需销毁,析构函数为空。
入队
template<class T>
void CirQueue<T>::EnQueue(T x){
if((rear+1)%QueueSize==front) throw "上溢";
rear=(rear+1)%QueueSize;
data[rear]=x;
}
出队
template<class T>
T CirQueue<T>::DeQueue(){
if(rear==front) throw "下溢";
front=(front+1)%QueueSize;
return data[front];
}
取队头
template<class T>
T CirQueue<T>::GetHead(){
if(rear==front) throw "下溢";
return data[(front+1)%QueueSize];
}
完整代码
const int QueueSize = 100;
template<class T>
class CirQueue{
public:
CirQueue();
~CirQueue();
void EnQueue(T x);
T DeQueue();
T GetHead();
int Empty();
private:
T data[QueueSize];
int front,rear;
};
template<class T>
CirQueue<T>::CirQueue(){
front=rear=QueueSize-1;
}
template<class T>
CirQueue<T>::~CirQueue(){
}
template<class T>
void CirQueue<T>::EnQueue(T x){
if((rear+1)%QueueSize==front) throw "上溢";
rear=(rear+1)%QueueSize;
data[rear]=x;
}
template<class T>
T CirQueue<T>::DeQueue(){
if(rear==front) throw "下溢";
front=(front+1)%QueueSize;
return data[front];
}
template<class T>
T CirQueue<T>::GetHead(){
if(rear==front) throw "下溢";
return data[(front+1)%QueueSize];
}
template<class T>
int CirQueue<T>::Empty(){
return rear==front?1:0;
}