中缀表达式转后缀、前缀表达式的方法

举一个中缀表达式的例子:a+b-a*((c+d)/e-f)+g

一、中缀表达式转后缀表达式

方法一:括号法

比较简单方便。

①按照运算符的优先级,对所有的运算单位加括号。

于是变成:(((a+b)-(a*(((c+d)/e)-f)))+g)

②从最里面的括号开始,依次把运算符号移动到对应的括号的后面

于是变成:(((ab)+(a(((cd)+e)/f)-)*)-g)+

③最后,把括号都去掉

于是变成:ab+acd+e/f-*-g+

 

方法二:利用语法树

略。

 

方法三:基于堆栈的算法

具体转换方式:

从左到右进行遍历。

1.遇到的是运算数,直接输出。

2.遇到的是左括号'(',直接压入堆栈(括号是最高优先级,无需比较;入栈后优先级降到最低,确保其他符号正常入栈)。

3.遇到的是右括号')',意味着括号已结束。不断弹出栈顶运算符并输出,直到遇到左括号,这个左括号弹出但是不输出。

4.遇到的是运算符('+'、'-'、'*'、'/'),有三种情况

①如果栈为空,直接入栈。

②如果栈顶元素是左括号'(',直接入栈。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值