队列的建立与基本操作算法(c语言实现)

队列的建立与基本操作算法(c语言实现)

ID:34502683

大小:55.50 KB

页数:10页

时间:2019-03-07

队列的建立与基本操作算法(c语言实现)_第1页
队列的建立与基本操作算法(c语言实现)_第2页
队列的建立与基本操作算法(c语言实现)_第3页
队列的建立与基本操作算法(c语言实现)_第4页
队列的建立与基本操作算法(c语言实现)_第5页
资源描述:

《队列的建立与基本操作算法(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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。