#include<iostream>
#include<fstream>
#include<stdlib.h>
using namespace std;
typedef struct LinkNode{
char data;
struct LinkNode *next;
} LinkNode;
typedef struct {
LinkNode *front , *rear;
} LinkQueue;
void InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = new LinkNode;
if(!Q.front)
exit(0);
Q.front->next=NULL;
}
bool IsEmpty(LinkQueue &Q)
{
if(Q.front==Q.rear)
return true;
else
return false;
}
void EnQueue(LinkQueue &Q, char e) {
LinkNode *s = new LinkNode;
s->data=e;
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
}
char DeQueue(LinkQueue &Q) {
if (IsEmpty(Q)){
cout<<"队列已为空"<<endl;
exit(0);
}
LinkNode *p = Q.front->next;
char e=p->data;
Q.front->next = p->next;
if(Q.rear==p)
Q.rear=Q.front;
delete p;
return e;
}
char GetHead(LinkQueue &Q)
{
if (Q.front != Q.rear)
{
LinkNode *p = Q.front->next;
return p->data;
}
}
void TraverseQueue(LinkQueue &Q)
{
LinkNode *p = Q.front->next;
while (p != NULL) {
cout<<p->data;
p = p->next;
}
}
int main()
{
LinkQueue Q;
int n;char e;
InitQueue(Q);
cout<<"输入队列的长度:"<<endl;
cin>>n;
cout<<"输入队列的元素:"<<endl;
for (int i = 1; i <= n; i++){
cin>>e;
EnQueue(Q, e);
}
cout<<"现在队首元素是:";
cout<<GetHead(Q)<<endl;
cout<<"遍历队列结果为:";
TraverseQueue(Q);
cout<<endl<<"请输入要插入的元素的数值:";
cin>>e;
EnQueue(Q,e);
cout<<endl<<"遍历队列结果为:";
TraverseQueue(Q);
cout<<endl<<"执行删除动作,被删元素是:"<<DeQueue(Q)<<endl;
cout<<"遍历队列结果为:";
TraverseQueue(Q);
cout<<endl;
if (IsEmpty(Q))
cout<<"队列为空"<<endl;
else
cout<<"队列非空"<<endl;
return 0;
}