#include<iostream>
using namespace std;
const int QueueSize=100;
template<class DataType>
class CirQueue
{
private:
DataType data[QueueSize];//存放隊列的數組
int front,rear;//隊頭和隊尾指針,,相當於數組的下標
public:
CirQueue();//構造函數
~CirQueue(){}//析構函數、、
void EnQueue(DataType x);//入隊
DataType DeQueue();//出隊
DataType getQueue();//讀取隊頭元素
int Empty();//判空
};
template<class DataType>
CirQueue<DataType>::CirQueue()
{
rear=front=QueueSize-1;//初始化一個空隊列,假設頭指針和尾指針都在最高處,即數組下標最大的地方
}
template<class DataType>
void CirQueue<DataType>::EnQueue(DataType x)
{
if((rear+1)%QueueSize==front) throw "上溢";
rear=(rear+1)%QueueSize;//尾指針在循環意義下加1
data[rear]=x;
}
template<class DataType>
DataType CirQueue<DataType>::DeQueue()
{
if(rear==front)throw "下溢";
front=(front+1)%QueueSize;//頭指針在循環意義下加1
DataType x=data[front];
return x;
}
template<class DataType>
DataType CirQueue<DataType>::getQueue()
{
if(rear==front) throw"下溢";
DataType x;
x=(front+1)%QueueSize;//注意不要給頭指針賦值,因爲取出隊頭元素不需要改變指針。
return x;
}
template<class DataType>
int CirQueue<DataType>::Empty()
{
if(front==rear)
return 1;
else
return 0;
}
int main()
{
CirQueue<int> c1;
int a[5];
for(int i=0;i<5;i++)
{
cin>>a[i];
c1.EnQueue(a[i]);
}
for(int i=0;i<5;i++)
{
cout<<c1.DeQueue()<<" ";
}
cout<<endl;
cout<<c1.Empty();
return 0;
}