- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第三章栈和队列-2
第3章 栈和队列 栈和队列是操作受限的线性表 栈的应用 栈是软件设计中最基础的数据结构,有着广泛的应用,其中最具有代表性的应用是用于子程序的实现、递归以及表达式的计算。 1. 栈的基本应用 设计算法完成如下功能:读入一个有限大小的整数n,并读入n 个整数,然后按输入次序的相反次序输出各元素的值。例如, 如果输入的n的值为5,其后面的各整数为1,2,3,4,5,则算法的输 出为5,4,3,2,1。 void main() { stacktype s; int n,x,i; printf(“请输入元素个数n:”); scanf(“%d”,n); initstack(s); for(i=1;i=n;i++) { scanf(“%d”,x);push(s,x)} while (empty(s)!=1) {printf(“%d”,gettop(s)); pop(s);} printf(“\n”); } 设置两个栈: 操作数栈(OPND) 运算符栈(OPTR) 2. 表达式的求值 求一个表达式的值:用户输入一个包含“+”、“-”、“*”、“\”、整数和圆括号的合法数学表达式,计算该表达式的值。 处理表达式时,从左到右依次读出表达式中的各个符号: (放入#到运算符栈中) 如是操作数,压入操作数栈,读下一个符号 如是运算符,则 (1) 读出的运算符优先级大于运算符栈栈顶的运算符的优先级,则压入运算符栈,读入下一个符号 (2) 读出的是“#”,且栈顶也是“#”,则处理结束,结果在操作数栈中 (3) 读出的是“(”,压入运算符栈 (4) 读出的是“)”,则: a.运算符栈栈顶不是“(”,则从操作数栈连续退出两个 操作数,从运算符栈中退出一个运算符,作相应的 运算,并将结果压入操作数栈中,继续执行a b.若运算符栈栈顶为“(”,从运算符栈中退出“(”, 读入下一个符号 (5) 读出的运算符的优先级不大于运算符栈栈顶的运算符的优先级,则从操作数栈连续退出两个操作数,从运算符栈中退出一个运算符,作相应的运算,并将结果压入操作数栈中。 请给出表达式5+(6-4/2)*3的计算过程 # OPTR OPND top top 5 6 4 2 # + ( - / OPTR OPND top top 5 4 # + ( OPTR OPND top top 5 6 2 # + ( - OPTR OPND top top 5 4 3 # + * OPTR OPND top top 5 4 # + OPTR OPND top top 17 # OPTR OPND top top 5 12 # + OPTR OPND top top 给出表达式1+2*(9-4*2)/2的求解过程 表达式表示: 中缀表达式 前缀表达式(波兰式) 后缀表达式(逆波兰式) 中缀表达式转换成前(后)缀表达式: 1. 将中缀表达式根据运算的先后顺序用括号括起来 2. 移动所有的运算符取代所有最近的左(右)括号 3. 删除所有的右(左)括号 A*(B+C/D)-E*F ((A*(B+(C/D)))-(E*F)) ((A*(B+(C/D)))-(E*F)) A*(B+C/D)-E*F ((A*(B+(C/D)))-(E*F)) ((A*(B+(C/D)))-(E*F)) -*A+B/CD*EF (前缀) ABCD/+*EF*- (后缀) 将下列各算术表达式表示成波兰式和逆波兰式: (A*(B+C)+D)*E-F*G A*(B-D)+H/(D+E)-S/N*T (A-C)*(B+D)+(E-F)/(G+H) 3.设计算法将十进制数转换成八进制形式。 基于以下原理: N=(N div d)+N mod d 例: 1348转化为8进制 N N div 8 N mod 8
文档评论(0)