中缀转后缀-example

以a+bc+(de+f)*g为例,演示中缀转后缀的手算过程

由左向右遍历表达式,首先遇到a,直接将其输出。
此时输出为:a
栈的情况为:空

继续遍历,遇到+,将其放入栈中。
此时输出为:a
栈的情况为:+

继续遍历,遇到b,直接将其输出。
此时输出为:ab
栈的情况为:+

继续遍历,遇到*,因为的优先级大于栈顶的+,所以将放入栈内。
此时输出为:ab
栈的情况为:+*

继续遍历,遇到c,直接将其输出。
此时输出为:abc
栈的情况为:+*

继续遍历,遇到+,因为+的优先级低于栈顶的*,故将弹出;然后新的栈顶元素的+与这个+优先级相同,故也要弹出现在栈顶的+;然后栈空了,将现在这个+放入栈中。
此时输出为:abc
+
栈的情况为:+

继续遍历,遇到(,直接将其放入栈中,不遇到)不会将(弹出。
此时输出为:abc*+
栈的情况为:+(

继续遍历,遇到d,直接将其输出。
此时输出为:abc*+d
栈的情况为:+(

继续遍历,遇到*,因为栈顶为(,不遇到)不将(弹出,故直接将放入栈中。
此时输出为:abc
+d
栈的情况为:+(*

继续遍历,遇到e,直接将其输出。
此时输出为:abc*+de
栈的情况为:+(*

继续遍历,遇到+,因为+比栈顶的优先级低,故将弹出;新的栈顶元素为(,不遇到)不弹出(,故将+放入栈中。
此时输出为:abc*+de*
栈的情况为:+(+

继续遍历,遇到f,直接将其输出。
此时输出为:abc*+de*f
栈的情况为:+(+

继续遍历,遇到),直接将栈中元素依次弹出并输出直到遇到(为止,注意:(弹出但不输出。
此时输出为:abc*+de*f+
栈的情况为:+

继续遍历,遇到*,因为的优先级大于栈顶元素+的优先级,故直接将入栈。
此时输出为:abc*+def+
栈的情况为:+

继续遍历,遇到g,直接将其输出。
此时输出为:abc*+def+g
栈的情况为:+

继续遍历,为空,遍历结束。将栈内元素依次弹出。
此时输出为:abc*+def+g+
栈的情况为:空

至此,中缀表达式转后缀已经全部完成,结果为abc*+def+g+

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值