中缀转后缀

从中序表达式 转换为 后序表达式

例题:

利用栈对表达式1+9/(8-5)*4求值的过程中,操作数栈的最大容量是多少?(B )。
A.3
B.4
C.5
D.2

操作数栈:先是+/(- , 然后遇到),则为+/ , 最后是+*

解析:
1.建立符号栈
2.顺序扫描中序表达式
a) 是数字, 直接输出
b) 是运算符
i : “(” 直接入栈
ii : “)” 将符号栈中的元素依次出栈并输出, 直到 “(”, “(“只出栈, 不输出
iii: 如果该操作符的优先级大于堆栈出口的操作符,就直接将操作符存储到堆栈中
iiii:如果该操作符的优先级不大于堆栈出口的操作符,就将堆栈出口的操作符导出(pop it), 直到该操作符的优先级大于堆栈顶端的操作符
3.扫描完后, 将栈中剩余符号依次输出

例 : 3+(2-5)*6/3

  • 遇到3,是数字,直接输出

表达式:3
符号栈:

  • 遇到+,栈是空的,直接将符号存储在堆栈中

表达式:3
符号栈:+

  • 遇到(,直接入栈

表达式:3
符号栈:+(

  • 遇到2,是数字,直接输出

表达式:32
符号栈:+(

  • 遇到-,遇到的操作符是左括号"(”,就直接将该操作符输出到堆栈当中

表达式:32
符号栈:+(-

  • 遇到5,是数字,直接输出

表达式:325
符号栈:+(-

  • 遇到),将符号栈中的元素依次出栈并输出, 直到 “(”, “(“只出栈, 不输出

表达式:325-
符号栈:+

  • 遇到*,该操作符的优先级大于堆栈出口的操作符,就直接将操作符存储到堆栈中

表达式:325-6
符号栈:+*

  • 遇到6,是数字,直接输出

表达式:325-6
符号栈:+

  • 遇到/,该操作符的优先级不大于堆栈出口的操作符,将堆栈出口的操作符导出, 直到该操作符的优先级大于堆栈顶端的操作符

表达式:325-6*
符号栈:+/

  • 遇到3,是数字,直接输出

表达式:325-6*3
符号栈:+/

  • 扫描完成,将符号栈内的符号依次输出

表达式:325-6*3/+

运用后缀表达式进行计算的具体做法:

例 : 6 5 2 3 + 8 * + 3 + *

  • 遇到数字,直接入栈

栈 :6 5 2 3

  • 遇到+,取栈顶的两个操作数,2+3=5,入栈

栈 :6 5 5

  • 遇到8,是数字,直接入栈

栈 :6 5 5 8

  • 遇到*,取栈顶的两个操作数,5*8=40,入栈

栈 :6 5 40

  • 遇到+,取栈顶的两个操作数,5+40=45,入栈

栈 :6 5 45

  • 遇到3,是数字,直接入栈

栈 :6 45 3

  • 遇到+,取栈顶的两个操作数,45+3=48,入栈

栈 :6 48

  • 遇到*,取栈顶的两个操作数,6*48=288,入栈

栈 :288

参考:https://blog.youkuaiyun.com/u012507347/article/details/52245233

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值