chap2-1-线性表-20140911.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文档。上传文档
查看更多
chap2-1-线性表-20140911

NO* 中缀表达式求值 A*B + C/D; 自左至右扫描表达式,对扫描的每个符号w作如下处理: 1) 若w为操作数,将其压入NS栈,继续扫描 2) 若w为运算符,需看当前OS的栈顶元素优先数: ①若w大于OS栈顶运算符,则将w压入OS栈,继续扫描。 ②若w为“;”,且OS栈顶也为“;”,则表示表达式处理结束,此时NS栈顶的元素即为此表达式的结果值。 ③若w为“)”,且OS栈顶也为“(”,从OS栈中弹出“(”,继续扫描. ④若w小于或等于OS栈顶运算符,则从NS栈中弹出两个操作数,设为x、y,再从OS栈中弹出一个运算符,设为θ,构成一条指令:y θ x → T,将结果T送入NS栈。继续与OS栈顶元素比较。 2.2 栈 NO* 后缀表达式求值  只需一个操作数栈,步骤: 1) 读入表达式一个字符 2) 若是操作数,压入栈,转4 3) 若是运算符,从栈中弹出2个数,将运算结果再压入栈 4) 若表达式输入完毕,栈顶即表达式值; 若表达式未输入完,转1 top 4 top 4 3 top 4 3 5 top 例 计算 4+3*5 转换为后缀表达式:435*+ top 4 15 top 19 后缀表达式计算简单方便,如何完成由中缀到后缀的转换呢? NO* 例中缀表达式A * B + C / D ; 求等价的后缀表达式? top 后缀: A (1) NS top 后缀: A (2) NS * top 后缀: AB (3) NS * top 后缀: AB* (4) NS + top 后缀: AB*C (5) NS + NS top 后缀: AB*C (6) + / top 后缀: AB*CD (7) NS + / (8) top 后缀: AB*CD/+ NS + / NO* 中缀表达式到后缀表达式的转换:需用一个运算符栈 请把 a+(b*c+d)/e 转换为后缀表达式 输入:中缀表达式     输出:后缀表达式   从左至右扫描中缀表达式,每个符号做如下判断: 1)若是变量则作为新表达式的变量; 2)若是“(”就入栈; 3)若是运算符则检查栈,如果栈空,则运算符进栈,             否则,与栈顶运算符比较:  (1) 若小于或等于栈顶运算符级别,则栈顶元素出栈,写入新表达式,继续比较下一个栈顶运算符;   (2) 反之,将新运算符入栈; 4)若是“)”,则将栈顶运算符一一出栈,写入新表达式中,直到读出相应的“(”为止,然后删去“(”。 abc*d+e/+ NO* 2.2 栈 ? 过程嵌套和递归调用 过程嵌套和递归调用是程序设计中很重要的应用。当过程调用子程序时,必须把断点的信息及地址保存起来,当子过程执行完毕返回时,取用这些信息,找到返回地址,从断点处继续执行。当程序中出现多重嵌套调用时,必须开辟一个栈,将各层断点信息依次入栈,当各层子过程返回时,又以相反的次序从栈顶取出,这样才能保证程序的正常执行。 * 递归的定义 若一个对象部分地包含它自己,或用它自己给自己定义, 则称这个对象是递归的;若一个过程直接地或间接地调用自己, 则称这个过程是递归的过程。 以下三种情况常常用到递归方法。 定义是递归的 数据结构是递归的 问题的解法是递归的 * 定义是递归的 求解阶乘函数的递归算法 long Factorial(long n) { if (n == 0) return 1; else return n*Factorial(n-1); } 例如,阶乘函数 * 求解阶乘 n! 的过程 主程序 main : fact(4) 参数 4 计算 4*fact(3) 参数 3 计算 3*fact(2) 参数 2 计算 2*fact(1) 参数 1 计算 1*fact(0) 参数 0 直接定值 = 1 参数传递 结果返回 递归调用 回归求值 返回 24 返回 6 返回 2 返回 1 返回 1 * 例如,单链表结构 一个结点,它的指针域为NULL,是一个单链表; 一个结点,它的指针域指向单链表,仍是一个单链表。 f ? f ? 2.数据结构是递归的 * 搜索链表最后一个结点并打印其数值 void Print(ListNode *f) { if (f -next == NULL) printf( “%d”,f -data); else Print(f -next); } f f f f f ? a0 a1 a2 a3 a4 递归找链尾 * 汉诺塔问题 Tower of Hanoi问题 问题描述: 有A,B,C三个塔座,A上套有n个直径不同的圆盘,按直径从小到大叠

文档评论(0)

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

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

1亿VIP精品文档

相关文档