数据结构第三章栈及队列--高职高专(第四版).pptVIP

数据结构第三章栈及队列--高职高专(第四版).ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
3.1 栈 3.1.1 栈的定义 3.1 栈 向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素。 从一个栈删除一个元素又称为出栈或退栈,它是把栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。 由于对栈的插入和删除操作只能在栈顶进行,所以栈是具有后进先出特性(Last In First Out)的线性表,简称为LIFO表。 3.1 栈 栈常用的基本操作: 3.1 栈 3.1.2 栈的顺序存储结构及其运算 3.1 栈 当有新元素进栈时,栈顶指针向上移动,top加1。栈指针top实际上就是数组的下标 。当有元素出栈时,栈顶指针向下移动,top减1。 用数组element[MAXLEN]作为栈的存储空间,element[top]为栈顶元素,当top= -1时栈为空;当top=0时,栈中有一个元素;当top=MAXLEN-1时,表示栈满。 当top=-1,栈为空,对空栈不能执行删除操作。当top =MAXLEN-1,栈满,栈满时不能再执行插入操作。 3.1 栈 1.初始化顺序栈 3.1 栈 2.取栈顶元素 3.1 栈 3.进栈操作 3.1 栈 4.出栈操作 3.1 栈 5.判空栈操作 3.1 栈 3.1.3 栈的链式存储结构及其运算 3.1 栈 链栈的主要操作有进栈、出栈和读栈等。 3.1 栈 1. 进栈 3.1 栈 2. 出栈 3.1 栈 3. 链栈的初始化(创建一个空链栈) 3.1 栈 3.1.4 栈的应用举例 3.1 栈 我们把运算符和界限符统称为算符,它们构成的集合称为OP。根据上述 三条算数运算规则,在运算的每一步中,任意两个相继出现的算符θ1 和θ2之间的优先关系至多是下面三种关系之一: θ1 θ2 θ1优先级低于θ2 ; θ1= θ2 θ1优先级等于于θ2 ; θ1 θ2 θ1优先级高于θ2 ; 表3-2定义了这种运算符之间的优先级。 3.1 栈 3.1 栈 为实现算符优先算法,可以使用两个工作栈。一个称作OPTR,用以寄存运算符;另 一个称作OPND用以寄存操作数或计算结果。算法的基本思想是: 首先置操作数栈为空栈,表达式起始符“@”为运算符栈的栈底元素; 依次读入表达式中的每一个字符,若是操作数则进OPND栈,若是运算符则和OPTR栈的栈顶运算符比较优先级后作相应的操作,直至整个表达式求值完毕(即OPTR栈的栈顶元素和当前读入的字符均为“@” )。 相应的操作是指: 若栈顶元素优先级低,则当前的运算符进栈,继续读取表达式中的下一个字符; 若栈顶元素优先级等于当前运算符的优先级,则脱去括号,继续读取表达式中的下一个字符; 若栈顶元素优先级高,则从OPTR栈中弹出运算符,从OPND栈中弹出两个操作数,先弹出的是操作数2,后弹出的是操作数1,操作数1在运算符左侧,操作数2在运算符右侧,对操作数1和操作数2执行运算符指定的运算后,将结果压入OPND栈。不再读入新字符,即当前字符不变,继续和栈顶运算符比较优先级。 根据上述算法描述,不难写出该算法的C/C++源程序。在对例3.1求值过程中,栈的 变化如下表所示。 3.1 栈 3.1 栈 3.1 栈 3.1 栈 算术表达式的另一种表示形式是后缀算术表达式。它是将运算符置于两 个操作数的后面。这种表达式不存在括号,也不存在优先级的差别,计 算过程完全按照运算符出现的先后次序进行。后缀表达式不是人们日常 使用的表达式形式,这就需要将日常使用的中缀表达式变成等价的后缀 表达式,然后再进行计算。 例如,对于下面的中缀表达式: 2*5-4 20-10/(2+3) 3*(a+b)/(4-c) 对应的后缀表达式为: 2 5 * 4 – 20 10 2 3 + / - 3 a b + * 4 c - / 3.1 栈 2. 中缀表达式转换成等价的后缀表达式 3.1 栈 例3.2 将中缀表达式2*(3+5)/(6-4)转换成等价的后缀表达式。 运算过程中,运算符栈的变化及输出结果如下表所示: 3.1 栈 3.1 栈 3. 函数递归的实现 函数直接或间接地调用自己的算法,叫做递归算法。 例3.3 用递归的方法求 n!。 3.1 栈 递归函数的执行过程如下: 系统首先为递归调用建立一个工作栈,在该工作栈中存放参数、局部变量和调用后的返回地址等信息; 在每次递归调用之前,把本次算法中所使用的参数、局部变量的当前值和调用后的返回地址等压入栈顶; 在每次执行递归调用结束之后,又把栈顶元素弹出,分别赋给相应的参数和局部变量,以便使它们恢复到调用前的状态,然后返回由返回地址所指定的位置; 继续执行后续指令。 3.1 栈 例3.4 设 n=4, 计算4!。用一个栈来描述其递归的求解过程。 3.1 栈 例3.5 Hanoi塔问题 3.1 栈

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档