栈的输出_栈的应用之四则运算

一 四则运算表达式求值

采用后缀(逆波兰)表示法

表达式:9+(3-1)x3+10÷2

流程:

1 上面的表达式为中缀表达式,我们需要先转换成后缀表达式,转换过程如下:

c34a0c4207b9c2a628271054028727ea.png

1.1 初始化一个空栈,用来对符号进出栈使用。

109671ff73f61dc20251e2ea28b3ab4b.png

1.2 第一个字符是数字9,输出9,后面符号是“+”,进栈。

943eafaf94d6ce10e1b02ad4ca9b2f8a.png

1.3 第三个字符是“(”,因其未配对,进栈。

fef429011152e5ecfe7175c34247704f.png

1.4 第四个符号是数字3,输出3,总表达式为9 3,接着是“-”,进栈,接着是数字1,总表达式为9 3 1.

37a0bc89d1b5d5a01dc11d3159d51bc6.png

1.5 接下来的字符是“)”,此时我们需要去匹配此前的“(”,所以栈顶依次出栈,并输出,直到“(”出栈。

此时左括号上方只有“-”,因此输出“-”,总的输出表达式为 ” 9 3 1 - “ 如上图。

接着是符号“ x ",因为此时的栈顶符号为“+”号,优先级低于“x”,因此不输出,“x"进栈,接着是数字3,输出。如下图所示:

39c720d7e446c62a4cebb35b2eb429f1.png

图 1.6

接下来是符号”+“,此时当前栈顶元素”x" 比这个 “+”优先级高,因此栈中元素出栈并输出(没有比“+”号更低的优先级,所以全部出栈),总输出表达式为 “9 3 1 - 3 * +”。然后将当前这个符号“+”进栈。如下图所示:

3a568b0677116eee9e5a9f76861b8e82.png

图1.7

接下来是是数字10,输出,总表达式为”9 3 1 - 3 * + 10“。后是符号”÷“,进栈。如下图所示:

a8a06fc5350abf808de1a3caa8ef21ef.png

图1.8

最后一个数字2,输出,总表达式为 ”9 3 1 - 3 * + 10 2“

因已经到最后,所以将栈中符号全部出栈并输出。最终输出的后缀表达式结果为” 9 3 1 - 3 * + 10 2 ÷ + “

2 后缀表达式计算结果

后缀表达式:9 3 1 - 3 * + 10 2 ÷ +

规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行运算,运算结果进栈,一直到最终获得结果。

2.1 初始化一个空栈

2.2 后缀表达式中前三个都是数字,所以 9 3 1 进栈,如图2.1

9f158a9ba502e06e64fb3a065d829ab1.png

图2.1

2.3 接下来是”-“,将栈中1出栈作为减数,3出栈作为被减数,并运算3-1得到2,再将2进栈,如图2.2

8f5be4ba3055ad61d0f92b7b4e2bc266.png

图2.2

2.4 接着是数字3,进栈,如图2.3所示

983baaf4eface079356fde35303dfb37.png

图2.3

2.5 接着是符号”*“,出栈3 和 2, 并运算2*3得6,入栈6,如图2.4所示

bcc6f1c32a5399d048eb4932cf813772.png

图2.4

2.6 接着是符号”+“,出栈6和9,运算6+19得15,入栈15,如图2.5所示

bf731a5c15201f634a346c7898ab2340.png

图2.5

2.7 接着是数字 10 和 2,入栈 10 和 2,如图 2.6所示

e29a7366e22d34f91122faaf6369a5bb.png

图2.6

2.8 接着是符号”÷“,出栈2作为除数,出栈10作为被除数,运算10÷2得5,入栈5,如图2.7所示

43ca161f7444c9b91175c703ef438e8b.png

图2.7

2.9 最后是符号”+“,出栈5和15,运算5+15得20,入栈20.如图2.8所示

9572927950027a86bd5af4f3d68355a9.png

图2.8

2.10 结果是20出栈,栈变为空。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值