资源描述:
《队列的建立与基本操作算法(c语言实现)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、队列的建立与基本操作算法(C语言实现)/*c3-2.h单链队列--队列的链式存储结构*//*c3-3.h队列的顺序存储结构(可用于循环队列和非循环队列)*/typedefstructQNode{QElemTypedata;structQNode*next;}QNode,*QueuePtr;typedefstruct{QueuePtrfront,rear;/*队头、队尾指针*/}LinkQueue;#defineMAXQSIZE5/*最大队列长度(对于循环队列,最大队列长度要减1)*/typedefstruct{QElemType*base;/*初始化的动态分配存储空间*
2、/intfront;/*头指针,若队列不空,指向队列头元素*/intrear;/*尾指针,若队列不空,指向队列尾元素的下一个位置*/}SqQueue;/*bo3-2.c链队列(存储结构由c3-2.h定义)的基本操作(9个)*//*bo3-3.c循环队列(存储结构由c3-3.h定义)的基本操作(9个)*/StatusInitQueue(LinkQueue*Q){/*构造一个空队列Q*/(*Q).front=(*Q).rear=(QueuePtr)malloc(sizeof(QNode));if(!(*Q).front)exit(OVERFLOW);(*Q).front->
3、next=NULL;returnOK;}StatusDestroyQueue(LinkQueue*Q){/*销毁队列Q(无论空否均可)*/while((*Q).front){(*Q).rear=(*Q).front->next;free((*Q).front);(*Q).front=(*Q).rear;}returnOK;StatusInitQueue(SqQueue*Q){/*构造一个空队列Q*/(*Q).base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));if(!(*Q).base)/*存储分配失败*/exit(O
4、VERFLOW);(*Q).front=(*Q).rear=0;returnOK;}StatusDestroyQueue(SqQueue*Q){/*销毁队列Q,Q不再存在*/if((*Q).base)free((*Q).base);(*Q).base=NULL;(*Q).front=(*Q).rear=0;returnOK;}12}StatusClearQueue(LinkQueue*Q){/*将Q清为空队列*/QueuePtrp,q;(*Q).rear=(*Q).front;p=(*Q).front->next;(*Q).front->next=NULL;while(
5、p){q=p;p=p->next;free(q);}returnOK;}StatusQueueEmpty(LinkQueueQ){/*若Q为空队列,则返回TRUE,否则返回FALSE*/if(Q.front==Q.rear)returnTRUE;elsereturnFALSE;}intQueueLength(LinkQueueQ){/*求队列的长度*/inti=0;QueuePtrp;p=Q.front;while(Q.rear!=p){i++;p=p->next;}StatusClearQueue(SqQueue*Q){/*将Q清为空队列*/(*Q).front=(*
6、Q).rear=0;returnOK;}StatusQueueEmpty(SqQueueQ){/*若队列Q为空队列,则返回TRUE,否则返回FALSE*/if(Q.front==Q.rear)/*队列空的标志*/returnTRUE;elsereturnFALSE;}intQueueLength(SqQueueQ){/*返回Q的元素个数,即队列的长度*/return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;}12returni;}StatusGetHead_Q(LinkQueueQ,QElemType*e)/*避免与bo2-6.c重名*/{/
7、*若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR*/QueuePtrp;if(Q.front==Q.rear)returnERROR;p=Q.front->next;*e=p->data;returnOK;}StatusEnQueue(LinkQueue*Q,QElemTypee){/*插入元素e为Q的新的队尾元素*/QueuePtrp=(QueuePtr)malloc(sizeof(QNode));if(!p)/*存储分配失败*/exit(OVERFLOW);p->data=e;p->next=NULL;(*Q).r