中缀表达式与后缀表达式的转换

理解的关键

从最简单的例子出发:
1 + 2 ×3 / 4
转换成后缀表达式:
1 2 3 × 4 / +
关键是要理解:后缀表达式是借用堆栈的后入先出来实现运算的,即:
上述的表达式可以以队列形式写出,然后借用堆栈进行计算:
如果是操作数,压栈,
如果是操作符,一次性弹出两个,分别是操作数2和操作数1
在理解这个原因的基础上,再看,中缀和后缀之间怎么转换

关键是要分开

即操作数和操作符分开对待,转换的结果可以用队列存储,但是,对于操作符的顺序就需要借用一下堆栈了。
观察可发现,后缀表达式的操作符之前一定有两个以上的操作数,如果,在从中缀转换的时候,操作符是需要先暂存一下的,比如这里:
+先用堆栈暂存,然后×,且比+优先级高,先暂存,然后/,这时候,×和/的优先级相等,且×的操作数已经入队列,这时候可以考虑将×弹出入队列。
而最后,当操作数都入队列以后,堆栈里如果还有操作符的话那么从顶到底的操作符优先级一定是从高到低的,这正好符合转换后的要求,直接弹出插入列队即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值