可扩充循环队列头文件与主程序

可扩充循环队列头文件与主程序

ID:11396635

大小:52.50 KB

页数:4页

时间:2018-07-11

可扩充循环队列头文件与主程序_第1页
可扩充循环队列头文件与主程序_第2页
可扩充循环队列头文件与主程序_第3页
可扩充循环队列头文件与主程序_第4页
资源描述:

《可扩充循环队列头文件与主程序》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、可扩充循环队列头文件与主程序//可扩充循环队列头文件.h#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineNULL0#defineINFEASIBLE-1#defineOVERFLOW-2typedefintStatus;//可扩充循环队列--队列的顺序存储结构#defineMAXSIZE5//队列初始分配元素#defineQUEUEINCREMENT2//存储增typedefstruct{QElemType*base;//初始化的动态

2、分配存储空间intfront;//头指针,若队列不空,指向队队头元素intrear;//尾指针,若队列不空,指向队队尾元素的下一个位置intqueuesize;//当前已分配的空间}SqQueue;/*约定:1.队列尾指针为实际末尾无素的下一位置.2.浪费一个元素空间,以"队列头指针在队列尾指针的下一位置(指环状的下一位置)上作为队列呈"满"状态的标志.Q为空循环队列的判定条件为:头尾重合Q.front==Q.rearQ为满循环队列的判定条件为:队尾赶上队头(Q.rear+1)%MAXSIZE=

3、=Q.front*/StatusInitQueue(SqQueue&Q){//1.构造一个空队列QQ.base=(QElemType*)malloc(MAXSIZE*sizeof(QElemType));if(!Q.base)exit(OVERFLOW);//存储分配失败Q.front=Q.rear=NULL;Q.queuesize=MAXSIZE;returnOK;}StatusDestroyQueue(SqQueue&Q){//2.销毁队列Q,Q不再存在free(Q.base);Q.base

4、=NULL;Q.front=Q.rear=NULL;Q.queuesize=0;returnOK;}StatusClearQueue(SqQueue&Q){//3.清空队列QQ.rear=Q.front=0;returnOK;}4intQueueLength(SqQueueQ){//4.返回Q的元素个数,即队列的长度return(Q.rear-Q.front+Q.queuesize)%Q.queuesize;}StatusQueueEmpty(SqQueueQ){//5.判循环队列空if(Q.f

5、ront==Q.rear)returnTRUE;//队列空elsereturnERROR;}StatusGetHead(SqQueueQ,QElemType&e){//6.若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERRORif(Q.front==Q.rear)returnERROR;//队列空e=Q.base[Q.front];returnOK;}StatusEnQueue(SqQueue&Q,QElemTypee){//7.插入元素e为Q的新的队尾元素if((Q.rear+1)

6、%Q.queuesize==Q.front)//队列满.队尾赶上队头{Q.base=(QElemType*)realloc(Q.base,(Q.queuesize+QUEUEINCREMENT)*sizeof(QElemType));if(!Q.base)exit(OVERFLOW);//存储分配失败if(Q.front>Q.rear)//队头指针在队尾指针之前增加空间破坏了原来的循环关系for(inti=Q.queuesize-1;i>=Q.front;i--)Q.base[i+QUEUEIN

7、CREMENT]=Q.base[i];//将原队列最末存储单元至队头元素依次后移使其重新保持循环关系Q.front+=QUEUEINCREMENT;//队头指针后移Q.queuesize+=QUEUEINCREMENT;//队空间大小增加}Q.base[Q.rear]=e;//元素插入新的队尾Q.rear=(Q.rear+1)%Q.queuesize;//循环队列队尾指针后移一个位置returnOK;}StatusDeQueue(SqQueue&Q,QElemType&e){//8.若队列不空,

8、则删除Q的队头元素,用e返回其值,并返回OK,否则返回ERRORif(Q.front==Q.rear)returnERROR;//队列空e=Q.base[Q.front];//队头元素赋给eQ.front=(Q.front+1)%Q.queuesize;//循环队列队头指针后移一个位置returnOK;}StatusQueueTraverse(SqQueue&Q,void(*visit)(QElemTypee)){//9.遍历队列,从头到尾依次对每个元素调用函数visit()inti=Q.fro

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

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

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