#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 ",IsEmpty(q)?"Empty":"UnEmpty"); ElemType e; HeadQueue(q,e); printf("Head_Queue is %c ",e); EnQueue(q,'a'); EnQueue(q,'b'); EnQueue(q,'c'); HeadQueue(q,e); printf("Head_Queue is %c ",e); DeQueue(q,e); HeadQueue(q,e); printf("Head_Queue is %c ",e); DeQueue(q,e); HeadQueue(q,e); printf("Head_Queue is %c ",e); DeQueue(q,e); HeadQueue(q,e); printf("Head_Queue is %c ",e); printf("The Queue is %s ",IsEmpty(q)?"Empty":"UnEmpty"); }