- 1、本文档共59页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
栈的顺序存储结构
递归举例 如:Fibonacci数列的递归实现 Fib(n)= 0 若n=0 Fib(n-1) + Fib(n-2) 其他情形 1 若n=1 int Fib(int n) 1 { 2 if (n == 0 || n ==1) 3 return n; 4 else 5 return Fib(n-1) + Fib(n-2); 6 } 回忆函数调用 被调函数运行之前,系统的处理事项: 将所有的实参、返回地址等信息传递给被调函数保存 为被调函数的局部变量分配存储区 将控制转移到被调函数的入口 从被调函数返回调用函数之前,系统的处理事项: 保存被调函数的计算结果 释放被调函数的数据区 依照被调函数保存的返回地址将控制转移到调用函数 调用函数和被调函数之间的连接和信息交换是通过栈进行的 栈与函数调用 系统将整个程序运行时所需的数据空间安排在一个栈中。 每当调用一个函数时,就为它在栈顶分配一个存储区(存放实参、局部变量及返回上一层的地址等,即工作记录)。 每当从一个函数返回时,执行: 从栈顶弹出一个工作记录。 将工作记录中的参数值、局部变量值赋给相应的变量;读取返回地址。 将函数值赋给相应的变量。 转移到返回地址。 队列的基本概念 队列是一种先进先出(First In First Out ,简称FIFO)的线性表。 限定插入操作只能在队尾进行,而删除操作只能在队首进行。 例如:排队购物、操作系统中的作业排队等,先进入队列的成员总是先离开队列。 队列的抽象数据类型定义 ADT Queue{ 数据对象:D ={ ai|ai∈ElemSet, i=1, 2, …, n, n = 0 } 数据关系:R = {ai-1, ai | ai∈D, i=2,3,…,n } 约定a1端为队首,an端为队尾。 基本操作: Create():创建一个空队列; EmptyQue():若队列为空,则返回true ,否则返回flase ; ?? InsertQue(x) :向队尾插入元素x; DeleteQue(x) :删除队首元素x; } ADT Queue 队列的表示和实现 队列也可以采用顺序存储结构或链表结构来实现,分别称为 顺序队列 链队列 链队列 链队列:只能在表头进行删除操作、只能在表尾进行插入操作的线性链表。为了方便起见,链队列也设有一个头结点。 两个指针: 队头指针Q.front指向头结点 队尾指针Q.rear指向尾结点 初始态:队空条件 头指针和尾指针均指向头结点 Q.front = Q.rear Q.front Q.rear data next 队首 队尾 头结点 队列运算指针变化状况 Q.front Q.rear 空队列 Q.front Q.rear x 元素x入队 Q.front Q.rear x y 元素y入队 Q.front Q.rear x y 元素x出队 队列的链式存储实现 链队列由头指针和尾指针唯一确定 链队列的基本操作——构造空队列 链队列的基本操作——销毁队列 注意:这里销毁队列的前提是队列为空。 链队列的基本操作——元素入队 链队列的基本操作——元素出队 注意:当删除队列中最后一个元素时,队尾指针会丢失,因此需对其重新赋值,指向头结点 队列的顺序表示和实现 利用一组连续的存储单元(一维数组) 依次存放从队首到队尾的各个元素,称为顺序队列。设两个指针: Q.front 指向队列头元素; Q.rear 指向队列尾元素的下一个位置 初始状态(空队列): Q.front = Q.rear=0 队列操作与指针变换 当插入新元素到队尾时,rear加1 当删除队首元素时,front加1 队首指针front始终指向队头元素 队尾指针rear 始终指向队列元素的下一个位置 front = rear表示队空 队列的假溢出 在入队和出队操作中,头、尾指针永远只增加不减小,使被删除元素的空间无法重新利用。 尽管队列中实际元素个数可能远远小于数组大小,但可能由于尾指针巳超出分配空间的上界而不能进行入队操作。该现象称为假溢出。 解决办法:循环队列 循环队列 为了克服假溢出,将为队列分配的向量空间看成为一个首尾相接的圆环,并称这种队列为循环队列(Circular Queue)。 在循环队列中进行出队、入队操作时, 仍对队首、队尾指针加1。 当队首、队尾指针指向数组 上界 (maxsize-1)时再退回0。 a b c d Q.front Q.rear maxsize-1 0
您可能关注的文档
最近下载
- 【国家标准】GB∕T 35450-2017 聚碳酸酯薄膜及片材.pdf
- 医疗废物管理制度 (1).doc VIP
- 青19J2青19J3建筑专业(三):建筑用料及做法+屋面.docx
- 项目安全资料标准化实施手册 (1).pdf VIP
- 2022年成都市武侯国有资本投资运营集团有限责任公司招聘考试题库及答案解析.docx VIP
- 机械设计软件:Creo二次开发_(2).CreoAPI基础.docx VIP
- 第三十八回 及时雨会神行太保 黑旋风斗浪里白条-名著《水浒传》阅读导航+情节概括+思维导图+原文批注+阅读训练初中语文.docx VIP
- 物理性污染与防治.ppt VIP
- 1+X快递运营理论测试题.docx VIP
- 9.29事故抢险救援战评总结.ppt VIP
文档评论(0)