栈的应用-处理四则运算-后缀表达式

栈的应用-处理四则运算-后缀表达式

什么是后缀表达式,正常的四则运算表达式,如:

9 + (3 - 1) * 3 + 10 / 2

这样的四则运算表达式称为中缀表达式,因为运算符号都在两个数字的中间。后缀表达式则是:

9 3 1 - 3 * + 10 2 / +

运算符号在将要运算的数字后面。

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

  • 1.先将 9 3 1 进栈,接下来是减号 - ,则将栈中的 1 出栈作为减数,3出栈作为被减数,并运算 3 - 1 得到 2 ,再将 2 进栈;
  • 2.接下来是 3 进栈,下一步 * 进栈,则此时 3 出栈,2 出栈,进行乘法运算,得到6;
  • 3. .……
  • 4.以此方法,直到计算结束。

后缀表达式可以很顺利地解决计算问题,问题是怎么将中缀表达式,转化成后缀表达式?

规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,成为后缀表达式的一部分;若是符号,就判断其与栈顶符号的优先级,是右括号或优先级低于栈顶符号(乘除优先加减),则栈顶元素依次出栈并输出,并将当前符号进栈,直到最终输出后缀表达式为止。

以上述表达式为例:

  • 1.初始化空栈,用来对符号进出栈使用;
  • 2.第一个数字9,输出9,后面是符号 + ,进栈;
  • 3.第三个字符是( ,进栈;
  • 4.第四个字符是数字 3 ,输出 ,现在总表达式为 9 3 ,接着是减号 - ,进栈;
  • 5.接下来是数字 1 ,输出,现在表达式是 9 3 1 ,后面是符号 ) ,此时,需要匹配前面的 ( ,因此栈顶依次出栈,直到 ( 出栈为止 。 现在表达式为 9 3 1 - ;
  • 6. 接着是数字 3 ,输出,表达式变为 9 3 1 - 3 ……
  • 7. ……
  • 8. 最后一个数字 2 ,输出,总表达式为 9 3 1 - 3 * + 10 2 ;
  • 10. 到最后,将栈中符号全部出栈并输出,最终表达式为 9 3 1 - 3 * + 10 2 / +

总结:
从上述推导中会发现,要让计算机具有处理中缀表达式的能力,最重要的就是两步:
1.将中缀表达式转化为后缀表达式;
2.将后缀表达式进行运算得出结果。

整个过程充分运用了栈的后进先出特性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值