《数据结构》(C语言版)第三章-栈和队列解析.ppt

《数据结构》(C语言版)第三章-栈和队列解析.ppt

  1. 1、本文档共70页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

*3.4.3循环队列-队列的顺序表示和实现#defineMAXQSIZE100//最大队列长度typedefstruct{QElemType*base;//动态分配存储空间intfront;//头指针,若队列不空,//指向队列头元素intrear;//尾指针,若队列不空,指向//队列尾元素的下一个位置}SqQueue;*实现:用一维数组实现base[M]P63图3.12123450空队列rear=0front=0J1J2J3rearrear123450J4,J5,J6入队J4J5J6frontrearrear123450frontJ1,J2,J3入队rear123450J1,J2,J3出队J1J2J3frontfrontfrontfront存在问题:当front=0,rear=M时,再有元素入队发生溢出——真溢出当front≠0,rear=M时,再有元素入队发生溢出——假溢出*解决方案队首固定,每次出队剩余元素向下移动——浪费时间循环队列基本思想:把队列设想成环形,让base[0]接在base[M-1]之后,若rear+1==M,则令rear=0;实现:利用“模”运算入队:base[rear]=e;rear=(rear+1)%M;出队:e=base[front];front=(front+1)%M;队满、队空判定条件*012345rearfrontJ4J5J6012345rearfrontJ3J8J7J3,J4,J5出队J6,J7,J8入队队空:front==rear队满:front==rear解决方案:1.另外设一个标志位以区别队空、队满2.少用一个元素空间:队空:front==rear队满:(rear+1)%M==front3.使用一个计数器记录队列中元素的总数J4J5012345rearfront初始状态J3*StatusInitQueue(SqQueueQ){//构造一个空队列QQ.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemType));if(!Q.base)exit(OVERFLOW);//存储分配失败Q.front=Q.rear=0;returnOK;}*StatusEnQueue(SqQueueQ,QElemTypee){//插入元素e为Q的新的队尾元素if((Q.rear+1)%MAXQSIZE==Q.front)returnERROR;//队列满Q.base[Q.rear]=e;Q.rear=(Q.rear+1)%MAXQSIZE;returnOK;}*StatusDeQueue(SqQueueQ,QElemTypee){//若队列不空,则删除Q的队头元素,//用e返回其值,并返回OK;否则返回ERRORif(Q.front==Q.rear)returnERROR;e=Q.base[Q.front];Q.front=(Q.front+1)%MAXQSIZE;returnOK;}*第三章作业补充作业:1.设将整数1、2、3、4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请回答下有问题:(1)若入栈次序为push(1),pop(),push(2),push(3),pop(),pop(),push(4),pop(),则出栈的数字序列为什么?(2)请分析1、2、3、4的24种排列中,哪些序列可以通过相应的入出栈得到。2.写出检验括号匹配的算法。*3.12写出以下程序段的

文档评论(0)

158****4121 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档