#include <iostream>
using namespace std;
const int QueueSize=100;
template<class T>
class CirQueue
{
public:
CirQueue(){front=rear=QueueSize-1;}
~CirQueue(){}
void EnQueue(T x);
T DeQueue();
T Gethead();
bool Empty();
private:
T data[QueueSize];
int front,rear;
};
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>
bool CirQueue<T>::Empty()
{
if(rear==front)
{
return true;
}
else
{
return false;
}
}
int main()
{
int x;
CirQueue<int> cq;
cout<<"对6、7、8执行入队操作:"<<endl;
cq.EnQueue(6);
cq.EnQueue(7);
cq.EnQueue(8);
cout<<"当前队头元素为:"<<cq.Gethead()<<endl;
try
{
cout<<"请输入要入队的元素"<<endl;
cin>>x;
cq.EnQueue(x);
}catch(const char *str){cout<<str<<endl;}
try
{
x=cq.DeQueue();
cout<<"执行一次出队操作,删除元素: "<<x<<endl;
}catch(const char *str){cout<<str<<endl;}
if(cq.Empty())
{
cout<<"队列为空"<<endl;
}
else
{
cout<<"队列非空"<<endl;
}
cout<<"依次执行出队操作,直至队空:"<<endl;
while(!cq.Empty())
{
try
{
x=cq.DeQueue();
cout<<"执行一次出队操作,删除元素: "<<x<<endl;
}catch(const char *str){cout<<str<<endl;}
}
if(cq.Empty())
{
cout<<"队列为空"<<endl;
}
else
{
cout<<"队列非空"<<endl;
}
return 0;
}
运行结果: