#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef struct LinkNode
{
ElemType data;
struct LinkNode *next;
}LinkNode;
typedef struct
{
struct LinkNode *front,*rear;
}LinkQueue;
void InitQueue(LinkQueue &q)
{
q.rear=q.front=(LinkNode*)malloc(sizeof(LinkNode));
q.front->next=NULL;
}
bool IsEmpty(LinkQueue q)
{
if(q.front==q.rear)
return true;
else
return false;
}
void EnQueue(LinkQueue &q,ElemType e)
{
LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=e;
s->next=NULL;
q.rear->next=s;
q.rear=s;
}
bool DeQueue(LinkQueue &q,ElemType &e)
{
if(q.rear==q.front)
return false;
LinkNode *p=q.front->next;
e=p->data;
q.front->next=p->next;
if(q.rear==p)
q.front=q.rear;
free(p);
return true;
}
bool HeadQueue(LinkQueue q,ElemType &e)
{
if(q.front==q.rear)
return e='?';
e=q.front->next->data;
return true;
}
void main()
{
LinkQueue q;
InitQueue(q);
printf("The Queue is %s\n",IsEmpty(q)?"Empty":"UnEmpty");
ElemType e;
HeadQueue(q,e);
printf("Head_Queue is %c\n",e);
EnQueue(q,'a');
EnQueue(q,'b');
EnQueue(q,'c');
HeadQueue(q,e);
printf("Head_Queue is %c\n",e);
DeQueue(q,e);
HeadQueue(q,e);
printf("Head_Queue is %c\n",e);
DeQueue(q,e);
HeadQueue(q,e);
printf("Head_Queue is %c\n",e);
DeQueue(q,e);
HeadQueue(q,e);
printf("Head_Queue is %c\n",e);
printf("The Queue is %s\n",IsEmpty(q)?"Empty":"UnEmpty");
}