中缀表达式转换为后缀表达式

中缀表达式转换为后缀表达式

运算符的优先级考虑

将中缀表达式转换为相应的后缀表达式,需要根据操作符的优先级来进行栈的变化,我们用icp来表示当前扫描的运算符ch的优先级,该运算符进栈后的优先级为isp,则运算符的优先级如下表所示:
isp是栈内优先,icp是栈外优先。

操作符#(* /+ -
isp01536
icp06421

例子

将中缀表达式 a+b-a*((c+d)/e-f)+g 转为后缀表达式

步骤扫描项项类型动作栈内内容输出输出序列
0'#'进栈,读下一个符号#
1a操作数直接输出#aa
2+操作符isp(’#’)<icp(’+’),进栈# +a
3b操作数直接输出# +bab
4操作符isp(’+’)>icp(’-’),退栈并输出#+ab+
5isp(’#’)<icp(’ - ') ,进栈# -
6a操作数直接输出# -aab+a
7*操作符isp(‘-’)<icp(’ * '),进栈# - *ab+a
8(操作符isp(‘*‘)<icp(’ ( ') ,进栈# - * (ab+a
9(操作符isp(’ ( ‘)<icp(’ ( ') ,进栈# - * ( (ab+a
10c操作数直接输出# - * ( (cab+ac
11+操作符isp(’ ( ‘)<icp(’ + '),进栈# - * ( ( +ab+ac
12d操作数直接输出# - * ( ( +dab+acd
13)操作符isp(’+’)>icp(’)’),退栈并输出# - * ( (+ab+acd+
14isp(’(’)==icp(’ ) ') ,直接退栈# - * (ab+acd+
15/操作符isp(’(’)<icp(’/’),进栈# - * ( /ab+acd+
16e操作数直接输出# - * ( /eab+acd+e
17-操作符isp(’/’)>icp(’-’) ,退栈并输出# - * (/ab+acd+e/
18isp(’(’)<icp(’-’),进栈# - * ( -ab+acd+e/
19f操作数直接输出# - * ( -fab+acd+e/f
20)操作符isp(’-’)>icp(’)’) ,退栈并输出# - * (-ab+acd+e/f-
21isp(’(’)==icp(’)’),直接退栈# - *ab+acd+e/f-
22+操作符isp(’*’)>icp(’+’) ,退栈并输出# -*ab+acd+e/f-*
23isp(’-’)>icp(’+’) ,退栈并输出#-ab+acd+e/f-*-
24isp(’#’)<icp(’+’) ,进栈# +ab+acd+e/f-*-
25g操作数直接输出# +gab+acd+e/f-*-g
26#操作符isp(’+’)>icp(’#’) ,退栈并输出#+ab+acd+e/f-*-g+
27isp(’#’)>icp(’#’) ,退栈结束ab+acd+e/f-*-g+

即相应的后缀表达式为 ab+acd+e/f-*-g+ 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值