#ifndef CirQueue_H
#define CirQueue_H
const int QueueSize=100;
template<class DataType>
class CirQueue
{
public:
CirQueue(){front=rear=QueueSize-1;}
~CirQueue(){}
void EnQueue(DataType x);
DataType DeQueue();
DataType GetQueue();
int Empty()
{if(front==rear)
return 1;
else return 0;
}
private:
DataType data[QueueSize]; //存放队列元素的数组
int front,rear; //队头和队尾指针
};
#endif;
#include"CirQueue.h"
template<class DataType>
void CirQueue<DataType>::EnQueue(DataType x)
{
if((rear+1)%QueueSize==front) throw"上溢";
rear=(rear+1)%QueueSize;
data[rear]=x;
}
template<class DataType>
DataType CirQueue<DataType>::DeQueue()
{
if(rear==front)throw"下溢";
front=(front+1)%QueueSize;
return data[front];
}
template<class DataType>
DataType CirQueue<DataType>::GetQueue()
{ int i;
if(rear==front) throw"下溢";
i=(front+1)%QueueSize;
return data[i];
}
#include<iostream>
using namespace std;
#include"CirQueue.cpp"
void main()
{
CirQueue<int>Q; //创建模板类的实例
if(Q.Empty())
cout<<"队列为空"<<endl;
try
{
Q.EnQueue(10); //入队操作
Q.EnQueue(15);
}
catch(char* wrong)
{
cout<<wrong<<endl;
}
cout<<"查看对头元素:"<<endl;
cout<<Q.GetQueue()<<endl;
cout<<"执行出队操作:"<<endl;
try
{
Q.DeQueue();
}
catch(char*wrong)
{
cout<<wrong<<endl;
}
cout<<"查看队头元素:"<<endl;
cout<<Q.GetQueue()<<endl;
}