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