//環境: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;
}