鏈隊列的實現(c++)

 

// 環境:vs2010
// 代碼比較少,所以直接一個源文件
#include <iostream>
using namespace std;

template <class DataType>
struct Node //結點結構
{
	DataType data;
	Node<DataType>* next;

};
template <class DataType>
class LinkQueue
{
public:
	LinkQueue();//構建空隊列
	~LinkQueue();//撤銷隊列
	void EnQueue(DataType x);//x進隊
     DataType DeQueue( ); //出隊並將出隊元素返回      
     DataType GetQueue( );//獲取隊頭元素
     bool Empty( );//隊空判斷

private:
	Node<DataType>* front;//隊頭指針,指向附加結點,隊頭元素爲附加結點後的第一個結點
	Node<DataType>* rear;//隊尾指針,隊尾元素爲隊尾指針所指結點

};
template <class DataType>
LinkQueue<DataType>::LinkQueue()
{
	front=new Node<DataType>;
	front->next =NULL;
	rear=front;
}
template <class DataType>
LinkQueue<DataType>::~LinkQueue()
{
	while(front)
	{
		Node<DataType>* p=front;
		front=front->next ;
		delete p;
	}
}
template <class DataType>
void LinkQueue<DataType>::EnQueue(DataType x)
{
	Node<DataType>* s=new Node<DataType>;
	s->data =x;
	s->next =NULL;
	rear->next =s;//進隊
	rear=s;//修改尾指針
}
template <class DataType>
DataType LinkQueue<DataType>::DeQueue( )
{
	if(Empty())throw "空隊,溢出";
	Node<DataType>* p=front->next ;
	DataType x=p->data ;
	front->next =p->next ;//出隊
	if(p->next ==NULL)rear=front;//刪除一個元素時需修改尾指針
	delete p;//刪除出隊元素
	return x;//出隊元素返回

}
template <class DataType>
DataType LinkQueue<DataType>::GetQueue( )
{
	if(Empty())throw "空隊,溢出";
	return front->next ->data ;
}
template <class DataType>
bool LinkQueue<DataType>::Empty( )
{
	if(front==rear)return true;
	else return false;
}
void main()
{
	LinkQueue<int> mylinkqueue;
	int a[]={1,2,3,4,5};
	for(int i=0;i<5;i++)
	{
		cout<<"進隊元素="<<a[i]<<endl;
		mylinkqueue.EnQueue(a[i]);
	}
	cout<<"隊頭元素="<<mylinkqueue.GetQueue()<<endl;
	while(!mylinkqueue.Empty())
	{
		cout<<"出隊元素="<<mylinkqueue.DeQueue()<<endl;
	}
}

 

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