后缀表达式

   后缀表达式是什么?我们平时的运算式子有符号优先级的概念,例如 3+5*(2+1),这也叫中缀表达式,我们计算时会先算括号中2+1的值 ,然后再乘以5,最后再和3相加,实际的运算过程的先后与列出式子的顺序大不相同。
      人在计算前可以通过眼睛全局观察整个式子的概况然后进行计算,但是计算机却很难做到这点,在3+5*(2+1)中,计算机读到了3+,然后该读到5了,它到底是用3+5直接算出结果还是让3+等着,看看5后面的情况,如果5后面是+,它是继续等着5后面的+号的后是否有优先级更高的符号还是计算之前的3+5呢,所以对于计算机来说顺着中缀表达式计算是很矛盾又复杂的。所以人们发明出了后缀表达式这种对于计算机来说“很容易”看懂的式子排列结构,便是后缀表达式,因为所有的符号都是在要运算数字的后面出现,所以叫后缀。
     那么后缀表达式如何写呢?或者说已知中缀表达式,如何转化成后缀呢,那得首先提到栈的概念;
   栈是计算机的一种存储方式,栈像个弹匣一样,所有数据类比成子弹,先放入的子弹在弹夹底部,后放入的在弹夹顶部,使用的时候,射出的子弹先是弹夹顶部,然后一个一个向弹匣底部走。即先入后出,后入先出;如图

    转换:从左到右遍历中缀式子,如果是数字就直接输出,若是符号放入栈。
 如果是右括号,则符号依次出栈,直到左括号出栈为止      
 如果要放入的符号没有比之前栈顶的符号优先级高,那就使栈顶符号出栈,然后让当前的符号进栈。


拿 3+5*(2+1)举例 
1.3输出  
2.+进栈
3.5输出 
4.*进栈    *比+优先级高,不操作 
5.(进栈
6.2输出  
7.+进栈 由于+下有左括号,因此不操作,等右括号  
8.1输出  
9.)进栈 
10.(出栈 +出栈输出 )出栈   //左右括号间只有+号 
11.表达式遍历完了 那就输出栈中剩余的* +
最终结果:3521+*+ 

计算机是如何操作后缀表达式的?
将后缀表达式遍历,遇到数字入栈。遇到符号使栈顶的2个数字进行运算,然后运算的结果入栈,依次进行

拿3521+*+举例  
1.3521入栈
2.+号 使2+1得3,3入栈 
3.*号 使3*5得15,15入栈 
4.+号 使15+3得18,得出结果18
结果和3+5*(2+1)的结果一样,所以正确


最后关于中缀转换成后缀有个简易的方法:
那就是给中缀所有运算关系加上括号,然后把符号移到相应的括号后面,最后去掉括号即可
拿3+5*(2+1)举例
加完括号后为  (3+(5*(2+1))) 
转移符号      (3(5(21)+)*)+
最后去括号     3521+*+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值