关于中缀表达式转后缀表达式

本周在写安卓计算器时用到了后缀表达式

学习之后在此奉上中缀转后缀的具体方法
  • 拿到一个算式,建立一个临时符号栈,一个后缀表示式栈
  • 从前到后依次查看,如果遇到数字,直接放在后缀表达式栈
  • 遇到非右括号的符号先放在临时符号栈,查看前一个符号是否比他的优先级高,如果高于他,那么弹出前一个符号放进后缀表达式栈(注意不用理会括号)
  • 如果遇到右括号,先扔掉右括号,然后依次弹出临时符号栈的符号放进后缀表达式栈,直到遇到左括号,这时扔掉左括号,完毕
  • 接着进行算式下一个的判断,直到算式判断完毕,此时如果临时符号栈还有符号,那么依次弹出,放进后缀表达式栈
  • 至此转换完毕
上具体例子看一下

  • 比如 

    1+1+(6+3*2-4) 

 第一个是数字放进–后缀表达式栈【1,】  
第二个是符号放进–符号栈【+,】(此时只有一个符号,所以不进行优先级的查看)  
第三个是数字放进–后缀表达式栈【1,1,】  
第四个是符号放进–符号栈【+,+,】,因为+的优先级相同,所以不管  
第五个是左括号放进–符号栈【+,+,(,】(此时是括号,所以不管)  
第六个是数字放进–后缀表达式栈【1,1,6,】  
第七个是符号放进–符号栈【+,+,(,+,】(前面是括号,所以不管)  
第八个是数字放进–后缀表达式栈【1,1,6,3,】  
第九个是符号放进–符号栈【+,+,(,+,*,】(加号比乘优先级低,不管)  
第十个是数字放进–后缀表达式栈【1,1,6,3,2,】  
第十一个是符号放进–符号栈【+,+,(,+,*,-,】,由于乘号比减号优先级高,  
——-所以乘号弹出放进后缀表达式栈【1,1,6,3,2,*,】,此时符号栈【+,+,(,+,-,】  
十二个是数字放进后缀表达式栈— 【1,1,6,3,2,*,4,】  
第十三个是右括号,扔掉右括号,从符号栈取出一个个符号,直到遇到左括号  
———此时符号栈【+,+,】—后缀表达式栈【1,1,6,3,2,*,4,-,+,】扔掉左括号  
算式完毕,将符号栈的全部取出此时的后缀表达式就为【1,1,6,3,2,*,4,-,+,+,+】
上具体计算方法

  • 从后缀表达式的第一个字符看起,如果遇到符号,则将此符号的前两个想运算,得到的结果代替这两个数字和这个符号 

如上面的后缀表达式第一次运算后得到的后缀表达式为【1,1,6,6,4,-,+,+,+】 
第二次运算【1,1,6,2,+,+,+】 
第三次运算【1,1,8,+,+】 
第四次运算【1,9,+】 
最后的结果就为10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值