数据结构:栈的应用3.4.2,中缀如何转后缀

前面已经提到,计算机计算表达式的值是通过后缀表达式实现的
A+B*(C-D)-E/F是我们一般生活中经常见到的中缀表达式,
转换为后缀表达式变为ABCD-*+EF/-,虽然转换可以通过手动添加括号并且后移实验,那么在计算机中如何进行这种转换呢。
计算机中转后仍然要用到栈。

对于待转换序列A+B*(C-D)-E/F,如果是操作数,则直接输出,如果是操作符,则压入栈中。当栈中存在操作符时,又有新的操作符时,需要判断栈中和栈外的操作符优先级,做出相应判断,若栈外运算符优先级较高时,压入栈;若栈外运算符优先级较低,从栈顶逐步弹出比当前运算符优先级高或者相等的运算符

操作符栈中优先级站外优先级
(16
*/54
±32
)61

可简单记为:同等级的,栈中高,栈外低;不同等级的,依然是先运算的较高
从上表可以看出,出现’(‘时,直接入栈。当出现’)‘时,需要逐个弹出栈中元素,直到出现’(’,并从栈中删去’(’。
A+B*(C-D)-E/F处理过程如下 栈中左边代表栈顶

待处理栈中输出
A+B*(C-D)-E/F
+B*(C-D)-E/FA
B*(C-D)-E/F+A
*(C-D)-E/F+AB
(C-D)-E/F*+AB
C-D)-E/F(*+AB
-D)-E/F(*+ABC
D)-E/F-(*+ABC
)-E/F(*+ABCD
-E/F*+ABCD-
E/F-ABCD-*+
/F-ABCD-*+E
F/-ABCD-*+E
null/-ABCD-*+EF
nullnullABCD-*+EF/-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值