#include<iostream.h>
typedef struct LNode{
int data;
LNode *next;
}LNode;
typedef struct {
LNode *front;
LNode *rear;
}LinkQueue;
void InitQueue(LinkQueue &HQ){ //初始化链队
HQ.front=HQ.rear=NULL;
}
void ClearQueue(LinkQueue &HQ){ //清空队列
LNode *p=HQ.front;
while(p){ //从队列顶到底依次删除每个结点
HQ.front=HQ.front->next;
delete p;
p=HQ.front;
}
HQ.rear=NULL; //置链队为空
}
int QueueEmpty(LinkQueue &HQ)//检查队列是否为空
{
if(!HQ.front) return 0;
}
int QFront(LinkQueue &HQ){ //读取队首元素
if(!HQ.front){
cout<<"队列为空!"<<endl;
return 1;
}
return HQ.front->data;
}
void QInsert(LinkQueue &HQ,int n){ //在队中插入元素,入队
LNode *p=new LNode; //为插入元素获得动态结点
p->data=n; //给新分配的结点赋值
p->next=NULL; //向队列顶插入新结点
if(!HQ.front) HQ.front=HQ.rear=p;
else HQ.rear=HQ.rear->next=p;
}
int QDelete(LinkQueue &HQ){ //出队
if(!HQ.front){
cout<<"Linked queue is emptu!"<<endl;
return 1;
}
int temp=HQ.front->data;
LNode *p=HQ.front; //暂存队首指针
HQ.front=p->next; //使队列顶指针指向其后继结点
if(!HQ.front) HQ.rear=NULL;
delete p;
return temp;
}
void main()
{
LinkQueue HQ;
InitQueue(HQ);
int n;
for(int i=0;i<5;i++)
{
cin>>n;
QInsert(HQ,n);
}
for(int j=0;j<5;j++)
cout<<" "<<QDelete(HQ);
cout<<endl;
cout<<QueueEmpty(HQ);
}