3.8 以带头结点的循环链表表示队列,只设一个表尾指针。试编写相应置队列空、入队和出队操作。
#include<iostream>
using namespace std;
struct LinkQueue
{
LinkQueue *next;
int val;
};
struct Node
{
LinkQueue *rear;
};
void EnQueue(Node &q){//入队,别忘了&
LinkQueue *L=new LinkQueue;
q.rear=L;
for(int i=0;i<5;i++){
LinkQueue *s=new LinkQueue;
s->val=i;
q.rear->next=s; q.rear=s;
}
L=L->next;
q.rear->next=L;
}
void DeQueue(Node q){//出队
while(q.rear->val!=q.rear->next->val){
q.rear->val=-1;
cout<<q.rear->val<<" ";
q.rear=q.rear->next;
}
}
void OutQueue(Node q){//输出队列
LinkQueue *s=new LinkQueue;
s=q.rear;
cout<<q.rear->val<<" ";
q.rear=q.rear->next;
while(q.rear->next!=s->next){
cout<<q.rear->val<<" ";
q.rear=q.rear->next;
}
cout<<endl;
}
void Empty(Node &q){//置空
while(q.rear->next!=q.rear){
q.rear->next=q.rear->next->next;
}
delete q.rear;
}
int main()
{
Node q;
EnQueue(q);//入队
OutQueue(q);//输出
DeQueue(q);//出队
Empty(q);//置空
return 0;
}