栈的应用——四则运算表达式

1.将前缀表达式:+-*^ABCD/E/F+GH转换成中缀表达式

规则:从右至左扫描表达式,遇到数字时,将数字入栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算,并将结果入栈,重复上述过程直到表达式最左端。

步骤:(1)首先扫描H,是数字,入栈,栈中为:H

2)扫描G,是数字,入栈,栈中为:GH

3)扫描+,是运算符,依次弹出GH,得到G+H,入栈,栈中为:G+H

4)扫描F,是数字,入栈,栈中为:FG+H

5)扫描/,是运算符,依次弹出FG+H,计算F/(G+H),入栈,栈中为:F/(G+H)

6)扫描E,是数字,入栈,栈中为:EF/(G+H)

7)扫描/,是运算符,依次弹出EF/(G+H),计算E/F/(G+H),入栈,栈中为:E/F/(G+H)

8)扫描D,是数字,入栈,栈中为:DE/F/(G+H)

9)扫描C,是数字,入栈,栈中为:CDE/F/(G+H)

10)扫描B,是数字,入栈,栈中为:BCDE/F/(G+H)

11)扫描A,是数字,入栈,栈中为:ABCDE/F/(G+H)

12)扫描^,是运算符,依次弹出AB,计算A^B,入栈,栈中为:A^BC,DE/F/(G+H)

13)扫描*,是运算符,依次弹出A^BC,计算A^B*C,入栈,栈中为:A^B*CDE/F/(G+H)

14)扫描-,是运算符,依次弹出A^B*CD,计算A^B*C-D,入栈,栈中为:A^B*C-DE/F/(G+H)

15)扫描+,是运算符,依次弹出A^B*C-DE/F/(G+H),计算A^B*C-D+E/F/(G+H),得到结果

所以,最后的中缀表达式为A^B*C-D+E/F/(G+H)

 

2.如何将该中缀表达式A^B*C-D+E/F/(G+H)转换为后缀表达式

规则:从左到右扫描表达式,若是数字就输出,若是运算符,则判断其与栈顶运算符的优先级,是右括号或者是优先级不高于栈顶运算符,则栈顶元素依次出栈并输出,并将当前运算符进栈,一直到最终输出后缀表达式为止。

步骤:(1)扫描A,是数字,输出A,总表达式为:A

2)扫描^,是运算符,入栈,栈中为:^

3)扫描B,是数字,输出B,总表达式为:AB

4)扫描*,是运算符,优先级小于^,输出^*入栈,栈中为:*,总表达式为:AB^

5)扫描C,是数字,输出C,总表达式为:AB^C

6)扫描-,是运算符,优先级小于*,输出*-入栈,栈中为:-,总表达式为:AB^C*

7)扫描D,是数字,输出D,总表达式为:AB^C*D

8)扫描+,是运算符,优先级不高于-,输出-+入栈,栈中为:+,总表达式为:AB^C*D-

9)扫描E,是数字,输出E,总表达式为:AB^C*D-E

10)扫描/,是运算符,优先级大于+,不输出+/入栈,栈中为:/+,总表达式为:AB^C*D-E

11)扫描F,是数字,输出F,总表达式为AB^C*D-EF

12)扫描/,是运算符,优先级不高于/,输出栈顶/,将这个/入栈,栈中为:/+,总表达式为:AB^C*D-EF/

13)扫描(,是左括号,还没有配对,入栈,栈中为:(/+,总表达式为:AB^C*D-EF/

14)扫描G,是数字,输出G,总表达式为:AB^C*D-EF/G

15)扫描+,是运算符,因为栈顶是(,所以直接入栈,栈中为:+(/+,总表达式为AB^C*D-EF/G

16)扫描H,是数字,输出H,总表达式为:AB^C*D-EF/GH

17)扫描),是右括号,此时,我们需要去匹配前面的(,所以栈顶依次出栈,并输出,知道(出栈为止,此时,(上方只有+,因此输出+,栈中为:/+,总表达式为:

AB^C*D-EF/GH+

 (18)扫描完毕,依次将栈中运算符全部出栈并输出,所以,最终的表达式为AB^C*D-EF/GH+/+

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值