第10章-栈.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文档。上传文档
查看更多
第10章-栈

为了说 明栈的特点,下面我们来看一个例子: 例:一个栈的进栈序列为123,利用栈操作,那么可能的出栈序列是什么? 解:按照栈的特点,可能的出栈序列有以下五种: (1) 123:1进、1出、2进、2出、3进、3出; (2) 132:1进、1出、2进、3进、3出、2出; (3) 213:1进、2进、2出、1出、3进、3出; (4) 231:1进、2进、2出、3进、3出、1出; (5) 321:1进、2进、3进、3出、2出、1出。 不可能的出栈序列为:312。 1) 什么是递归 如果一个对象部分地包含它自己,或者利用自己定义自己的方式来定义或描述,则称这个对象是递归的。 递归过程:如果一个过程直接或间接地调用自己,则称这个过程是一个递归过程。 递归函数:一个直接调用自己或通过一系列的调用语句间接地调用自己的函数。 问题的定义是递归的——数学函数 问题所涉及的数据结构是递归的——单链表、树形结构 问题的解法满足递归的性质——八皇后问题、Hanoi塔问题 递归算法的思想: 算法的有限性要求必须存在递归出口。 递归算法指的是包含递归过程的算法,递归过程指的是调用自身的过程。 递归算法中通过对自身的调用,总能逐步逼近,直到满足递归出口。 递归算法的组成: 递归调用 递归终止条件 当一个函数的运行期间调用另一个函数时,系统要完成三件事: 将所有的实在参数、返回地址等信息传递给被调用函数保存。 为被调用函数的局部变量分配存储区。 将控制转移到被调用函数的入口。 从被调用函数返回调用函数之前,系统也要完成三件事: 保存被调函数的计算结果。 释放被调函数的数据区。 依照被调函数保存的返回地址将控制转移到调用函数。 例1 求解阶乘函数的递归过程 long Factorial(long n) { if (n==0) return 1; //递归终止条件 else return n * Factorial(n-1);       //递归调用过程 } 求解 4! 的过程 数制转换:编写一个程序,要求对于任一非负十进制整数,打印输出与其等值的八进制数. 例(1348)10=(2504)8 1.3 栈的应用 栈的典型应用有: “回溯”问题的求解; 过程递归调用和过程嵌套。 1.栈及其应用 (1) 递归调用 1.栈及其应用 例: 用C语言描述单链表 链表结构的C语言描述为:(数据结构定义) typedf int dataype; typedef struct node /* 结点类型 */ { datatype data; /* 数据域 */ struct node ?next; /* 指针域 */ }linklist; linklist ?head,?p; /*指针类型说明*/ 递归定义形式 1.栈及其应用 2) 适于用递归求解的内容 1.栈及其应用 3) 递归算法的设计 1.栈及其应用 1.栈及其应用 … 调用 返回 调用点 Pn Pn-1 Pn-2 P1 1 f(n) f(n-1) f(n-2) f(1) f(0) 在高级语言(编译程序)中,是利用“递归工作栈”来实现递归调用的。 调用时执行入栈操作保存现场,返回时执行出栈操作恢复现场 1.栈及其应用 递归次序 n! (n-1)! (n-2)! 1! 0!=1 返回次序 4) 递归调用实例 1.栈及其应用 1.栈及其应用 子程序的嵌套调用 有一主程序main()调用子程序示意图如下 end end end end ? ??????????? ? ??????????? ? ??????????? ? ? ? ?????????? ? ?????????? ? ?????????? sub3 sub2 sub1 main ? (2) 嵌套调用 1.栈及其应用 (3) 栈的应用举例 1.栈及其应用 * * 1.栈及其应用 2.队列及其应用 第十章 栈和队列 两种特殊的线性表,其特殊性表现在栈和队列的基本运算是线性表的子集,它们的逻辑结构和线性表相同,只是运算规则比线性表有更多的限制,故称它们是运算受限的线性表。 1.1 栈的基本概念 1.2 栈的存储结构 1.3 栈的应用 1.栈及其应用 1.栈及其应用 1.1 栈的基本概念 (1) 栈的定义: 栈是限定仅在表尾进行插入和删除运算的线性表;表尾称为栈顶;表头称为栈底;当栈中没有数据元素时

文档评论(0)

xxj1658888 + 关注
实名认证
文档贡献者

教师资格证持证人

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

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档