#include"stdio.h"#include"stdlib.h"#defineOK1#defineERROR0#defineStatusint#defineQElemTypeint//========ADTQueue的
示与实现========//-----单链队列—队列的链式存储结构-----typedefstructQNode{ QElemTypedata; structQNode*next;}QNode,*QueuePtr;typedefstruct{ QueuePtrfront;//队头指针 QueuePtrrear;//队尾指针}LinkQueue;//------基本操作的算法描述-------StatusInitQueue(LinkQueue&Q){ Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); if(!Q.front)exit(-1);//存储分配失败Q.front->next=NULL;returnOK;}//InitQueueStatusDestroyQueue(LinkQueue&Q){ //销毁队列Q while(Q.front){ Q.rear=Q.front->next; free(Q.front); Q.front=Q.rear; }//while returnOK;}//DestroyQueueintQueueLength(LinkQueueQ){//求队列的长度inti=0;QueuePtrp;p=Q.front;while(Q.rear!=p){i++;p=p->next;}returni;}//QueueLengthStatusEnQueue(LinkQueue&Q,QElemTypee){//插入元素e为Q的新的队尾元素QueuePtrp=(QueuePtr)malloc(sizeof(QNode));if(!p)//存储分配失败exit(-1);p->data=e;p->next=NULL;Q.rear->next=p;Q.rear=p;returnOK;}//EnQueueStatusDeQueue(LinkQueue&Q,QElemType&e){//若队列不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERRORQueuePtrp;if(Q.front==Q.rear)returnERROR;p=Q.front->next;e=p->data;Q.front->next=p->next;if(Q.rear==p)Q.rear=Q.front;free(p);returnOK;}//DeQueue//-----测试主
-----------------------------voidmain(){LinkQueueQ;QElemTypee;InitQueue(Q);EnQueue(Q,10);EnQueue(Q,20);EnQueue(Q,30);if(OK==DeQueue(Q,e))printf("%d\n",e);if(OK==DeQueue(Q,e))printf("%d\n",e);if(OK==DeQueue(Q,e))printf("%d\n",e);if(OK==DeQueue(Q,e))printf("%d\n",e);}