- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数 据 结 构 Data Structure 主讲人: 刘 玮 第三章 栈和队列 3.1 栈 3.1 栈 3.1 栈 1、顺序栈 1、顺序栈 1、顺序栈 2、链栈 2、链栈 顺序栈和链栈的比较 3.2 栈的应用 3.3 递归 3.3 递归 3.3 递归 3.3 递归 3.4 队列 3.4 队列 3.4 队列 1、链队列 1、链队列 1、链队列 1、链队列 1、链队列 2、线性队列 2、线性队列 3、循环队列 3、循环队列 3、循环队列 3、循环队列 循环队列和链队列的比较 本章小结 栈 逻辑结构:后进先出 抽象数据类型 物理结构:顺序栈,链栈 基本运算实现 栈空条件,栈满条件?(何时判断) 队列 逻辑结构:先进先出 抽象数据类型 物理结构:链队列,循环队列(顺序队列) 基本运算实现 队空条件,队满条件?(何时判断) 思考题 已知有一个多项式Fn(X),可递归定义如下: 试写出计算Fn(X)值的递归函数的过程。 算法 时间性能: 相同,都是常数时间O(1)。 空间性能: 循环队列:必须预先确定一个固定的长度,所以有存储元素个数的限制和空间浪费问题。 链队列:没有队列满的问题,只有当内存没有可用空间时才会出现队列满,但是每个元素都需要一个指针域,产生结构性开销。 算法思想: 当一个函数在运行期间调用另一个函数时,在运行该被调用函数之前,需先完成三件事: 将所有的实参、返回地址等信息传递给被调用函数保存; 为被调用函数的局部变量分配存储区; 将控制转移到被调用函数的入口。 而从被调用函数返回调用函数之前,应该完成: 保存被调用函数的计算结果; 释放被调用函数的数据区; 依照被调函数保存的返回地址将控制转移到调用函数。 由于函数的运行规则是:后调用先返回,因此各函数占有的存储管理应实行“栈式管理”。 3.2.6 函数的调用 3.3.1 递归的概念 递归的定义 若一个对象部分地包含它自己, 或用它自己给自己定义, 则称这个对象是递归的;若一个过程直接地或间接地调用自己, 则称这个过程是递归的过程。 以下三种情况常用到递归方法。 定义是递归的 数据结构是递归的 问题的解法是递归的 3.3.2 定义递归 求解阶乘函数的递归算法 long Factorial ( long n ) { if ( n == 0 ) return 1; else return n*Factorial (n-1); } 例如,阶乘函数 3.3.3 数据结构递归 某些数据结构就是递归的。例如,链表就是一种递归的数据结构。链表结点LNode的定义由数据域data和指针域next组成;而指针域next则又由LNode定义。 不仅单链表,广义表、树和图也都是递归结构。所以关于它们的一些算法,也需要用递归思想实现。 3.3.4 解法递归 有些问题只能用递归方法来解决,若不用递归就只能用枚举法了。 一个典型的例子就是“Tower of Hanoi”问题:婆罗门神庙里有一个塔台,台上有3根柱子(假设叫x,y,z)。在x柱上有64个金盘,每一个都比下面的小。把x柱上的金盘全部移到z柱上,移动的条件是:一次只能移动一个金盘,移动过程中大盘子只能放在小盘子下面。 汉诺塔(Tower of Hanoi)问题 有A、B、C三个塔座,A上套有n个直径不同的圆盘,按直径从小到大叠放,形如宝塔,编号1,2,3……n。要求将n个圆盘从A移到C,叠放顺序不变,移动过程中遵循以下原则: 每次只能移动一个圆盘; 圆盘可在三个塔座上任意移动; 任何时刻,每个塔座上不能将大盘压倒小盘上。 算法思想 n=1时,直接把圆盘从A移到C。 把上面n-1个圆盘从A移动到B; 然后将n号盘从A移到C; 将n-1个盘从B移到C。 n1时, 即把求解n个圆盘的Hanoi问题转化为求解n-1个圆盘的Hanoi问题,依次类推,直至转化成只有一个圆盘的Hanoi问题。 main() { int m; printf(“Input number of disks”); scanf(“%d”, m); printf(“Step: %3d disk”, m); hanoi(m,’a’,’b’,’c’); (0)} Void hanoi(int n, char x, char y, char z) (1){ (2) if(n==1) (3) move(1,x,z); (4) else{ (5) hanoi(n-1,x,z,y); (6)
您可能关注的文档
最近下载
- Office办公软件应用案例教程--电子教案.docx VIP
- 部编版语文六年级上册第一单元教学设计含习作园地一.pdf VIP
- 《闪亮的坐标—劳模王进喜》课件 2024-2025学年高教版(2023)中职语文职业模块_47498966.pptx VIP
- 上海正夕CL2800余氯分析仪使用说明书.pdf VIP
- 牛油果种植管理技术.pdf VIP
- AI驱动光接入网技术白皮书(2025版).docx
- JT∕T 200-2020 汽车客运站级别划分和建设要求(可复制版).pdf
- 完整版铁路工程实施性施工组织设计方案22.docx
- 飞行_载重平衡管理手册.pdf
- 第4章 PyTorch深度学习框架.pptx VIP
文档评论(0)