链队列的基本实现:
1,定义结点
2,初始化队列时,需要头结点,使操作统一;有两个指针,一个头指针,一个尾指针,两个指针都指向头结点。
3,入队操作,需要在队 尾进行元素的入队,若一次多个元素入队,需要循环入队,最后一个元素的指针域为空
4,出队操作,队头元素出队,需要注意队头元素并不是头结点。多个元素出队时,要循环调用出队函数。
5,判空操作。
#include<iostream>
using namespace std;
template<class DataType>
struct Node
{
DataType data;
Node<DataType> *next;
};
template<class DataType>
class LinkQueue
{
private:
Node<DataType> *front,*rear;
public:
LinkQueue();//构造函数
~LinkQueue(){}//析构函数
void EnQueue(DataType x);//入队
DataType DeQueue();//出队
DataType getQueue();//取出链队列的队头元素
int Empty();//判空
};
template<class DataType>
LinkQueue<DataType>::LinkQueue()
{
Node<DataType> *first;
first=new Node<DataType>;//创建一个头结点
first->next=NULL;
front=rear=first;//头指针和尾指针都指向头结点
}
template<class DataType>
void LinkQueue<DataType>::EnQueue(DataType x)
{
Node<DataType> *s;
s=new Node<DataType>;
s->data=x;
s->next=NULL;
rear->next=s;
rear=s;
}
template<class DataType>
DataType LinkQueue<DataType>::DeQueue()
{
if(front==rear) throw "下溢";
Node<DataType> *p;
p=front->next;
DataType x;
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(front==rear) throw "下溢";
return front->next->data;
}
template<class DataType>
int LinkQueue<DataType>::Empty()
{
if(front==rear)
return 1;
else
return 0;
}
int main()
{
LinkQueue<int> lq1;
//int a;
//a=1;
//lq1.EnQueue(a);
int n=5;
int a[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
lq1.EnQueue(a[i]);
}
for(int i=0;i<n;i++)
{
cout<<lq1.getQueue()<<endl;
lq1.DeQueue();
}
cout<<lq1.Empty();
return 0;
}