循環隊列的實現(c++)

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

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章