数据结构与算法实践教程.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

浙江理工大学队列的抽象数据类型定义ADTList{数据对象:D={ai|ai∈ElemType,i=1,2,...,n,n≥0}数据关系:R={ai-1,ai|ai-1,ai∈D,i=2,...,n}基本操作:InitQueue(Q)//初始化空队列QClearQueue(Q)//释放栈Q占用的存储空间QueueEmpty(Q)//判断队列是否为空QueueLength(SqQueueQ)//返回队列的长度GetHead(SqQueueQ,QElemType*e)//用e返回Q的队头元素InQueue(Q,e)//将元素e入队作为队尾元素OutQueue(Q,e)//从队列Q中出队一个元素,并将其赋值给eQueueTraverse(SqQueueQ)//从队头到队尾依次对队列Q中每个元素输出}ADTList浙江理工大学4.2.2队列的顺序存储1.顺序队列顺序存储的队列称为顺序队列。顺序队列类似于顺序栈,用一维数组来存放队列元素。但由于队头和队尾都是活动的。因此,设两个指针:队头指针和队尾指针。如果队列中元素的数目等于0,则称其为空队列,并规定此时队头指针和队尾指针均为0,即front=rear=0。每当插入新的队列尾元素时,“尾打针增1”;每当删除队列头元素时,“头指针增1”。因此,在非空队列中,我们指定队头指针指向队头元素在队列中的实际位置,队尾指针指向队尾元素在队列实际位置的后一个位置。如图4.6所示。浙江理工大学(a)空队(b)有3个元素(c)一般情况(d)假溢出现象图4.6队列操作示意图浙江理工大学顺序队列的存储结构定义typedefstruct{ intdata[MAXSIZE]; intfront; //头指针 intrear; //尾指针,若队列不空,指向队列尾元素的下一个位置}SqQueue;浙江理工大学(1)初始化顺序队列初始化一个空队列Q。intInitQueue(SqQueue*Q){ Q-front=0; Q-rear=0; returnOK;}算法4.11顺序队列的初始化浙江理工大学(2)清空顺序队列释放栈Q占用的存储空间。intClearQueue(SqQueue*Q){ Q-front=Q-rear=0; returnOK;}算法4.12顺序队列的清空浙江理工大学(3)顺序队列是否为空若队列Q为空队列,则返回TRUE,否则返回FALSE。IntQueueEmpty(SqQueueQ){ if(Q.front==Q.rear)/*队列空的标志*/ returnTRUE; else returnFALSE;}算法4.13顺序队列的判空浙江理工大学(4)顺序队列的长度返回Q的元素个数,也就是队列的当前长度。intQueueLength(SqQueueQ){ return(Q.rear-Q.front+MAXSIZE)%MAXSIZE;}浙江理工大学(5)返回顺序队列的首元素若队列不空,则用e返回Q的队头元素,并返回OK,否则返回ERROR。intGetHead(SqQueueQ,QElemType*e){ if(Q.front==Q.rear)//队列空 returnERROR; *e=Q.data[Q.front]; returnOK;}算法4.15返回顺序队列的首元素浙江理工大学(6)顺序队列的入队操作设用Q表示一个队列结构体变量,若已知待添加的元素变量为x,入队操作队尾指针加1,指向新位置后元素入队。其代码实现如下:intInQueue(SqQueueQ,intx){ if(Q.rear==MAXSIZE) printf(“溢出!\n”);//判断队列是否已满 else { Q.data[Q.rear]=x;//插入元素(Q.rear)++; }return1;}算法4.16

文档评论(0)

技术支持工程师 + 关注
实名认证
文档贡献者

仪器公司技术支持工程师

1亿VIP精品文档

相关文档