- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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个直径不同的圆盘,按直径从小到大叠
您可能关注的文档
最近下载
- 北师大版-数学-五年级上册-《多边形的面积》单元分析.doc VIP
- 新高考背景下历史课程教学改革探索教学研究课题报告.docx
- 2023-2024学年四川省成都市锦江区八年级(下)期末数学试卷(1).doc VIP
- DL T 1144-2012《火电工程项目质量管理规程》.pdf VIP
- 教科版六年级科学上册全册必背知识点知识清单.pdf VIP
- 《孩子是春天的另一种姿势》阅读练习及答案.doc VIP
- 2022-2023学年四川省成都市锦江区八年级(上)期末数学试卷.docx VIP
- T_CVMA 224-2025 猫传染性腹膜炎诊断规程.pdf VIP
- T_CVMA 232-2025 猪星状病毒五型荧光PCR检测方法.docx VIP
- T_CVMA 252-2025 马四肢X线及超声操作规范.pdf VIP
文档评论(0)