//环境:vs2010
//代码较少,直接一个源文件
#include <iostream>
using namespace std;
const int QueueSize=100;
template <class DataType>
class CirQueue
{
public:
CirQueue(); //建立空队
~CirQueue(){}//撤销循环队列
void EnQueue(DataType x); //队不满时,x进队
DataType DeQueue(); //队非空时,出队并将出队元素返回
DataType GetQueue(); //队非空时,获取队头元素
bool Empty();//队空判断
bool Full();//队满判断
private:
DataType data[QueueSize];
int front, rear;//队头指针,队尾指针;队头元素是队头指针所指的下一个单元数据,队尾元素是队尾指针所指的单元数据
};
template <class DataType>
CirQueue<DataType>::CirQueue( )//建立空队
{
front=-1;
rear=-1;
}
template <class DataType>
void CirQueue<DataType>::EnQueue(DataType x)
{
if(Full( ))throw "队满,溢出";
rear=(rear+1) % QueueSize;//修改队尾指针
data[rear]=x;//数据进队
}
template <class DataType>
DataType CirQueue<DataType>::DeQueue( )
{
if(Empty( ))throw "队空,溢出";
front=(front+1) % QueueSize;//修改队头指针
return data[front];//返回出队元素
}
template <class DataType>
DataType CirQueue<DataType>::GetQueue( )
{
if(Empty( ))throw "队空,溢出";
return data[(front+1) % QueueSize];//获取队头元素
}
template <class DataType>
bool CirQueue<DataType>::Empty( )
{
if(front==rear)return true;
else return false;
}
template <class DataType>
bool CirQueue<DataType>::Full( )
{
if((rear+1) % QueueSize==front)return true;
else return false;
}
void main()
{
CirQueue<int> mycirqueue;
int a[]={1,23,3};
cout<<"进队元素"<<endl;
for(int i=0;i<3;i++)
{
cout<<a[i]<<endl;
mycirqueue.EnQueue(a[i]);}
cout<<"对头元素="<<mycirqueue.GetQueue()<<endl;
while(!mycirqueue.Empty())
cout<<"出队元素="<<mycirqueue.DeQueue()<<endl;
}