后缀表达式与四则运算

栈—四则运算表达式求值

9+(3-1)×3+10÷2=?
计算机是怎么算出来等于20的呢?
本文讲解的内容是计算机如何使用栈来表达数学中的四则运算和求值。文中有两个主要的概念,分别是后缀表示法和中缀表达式如何转换成后缀表达式。

1.后缀表示法(逆波兰表示,RPN)

对于任意表达式,如”9+(3-1)×3+10÷2”,如果用后缀表示法是什么样子的:“9 3 1 – 3 * + 10 2 / +”,这样的表达式称为后缀表达式。叫后缀的原因在于所有的符号都是在要运算数字的后面。后缀表达式计算过程:
规则:从左到右遍历表达式的每个数字和符号,遇到数字就进栈,遇到符号,就将栈顶两个数字出栈,将两者进行运算,运算结果进栈;重复操作,直到遍历完后缀表达式,将得到最终结果。

尝试计算后缀表达式:“9 3 1 – 3 * + 10 2 / +”的值。
1.初始化一个空栈。遍历后缀表达式。前三位“9 3 1”都是数字,依次入栈…
在这里插入图片描述
终上所述,后缀表达式可以很顺利的解决计算问题。计算机通过后缀表达式的计算,完成了四则运算。

2.中缀表达式转后缀表达式

中缀表达式就是四则运算中,符号位于两个数字中间:”9+(3-1)×3+10÷2”,叫做中缀表达式。
关键问题是中缀表达式在计算机中是怎样转换成后缀表达式的!
中缀表达式”9+(3-1)×3+10÷2”转后缀表达式“9 3 1 – 3 * + 10 2 / +”的步骤:
规则:从左到右遍历中缀表达式的每个数字和符号;
若是数字,直接输出(即变成后缀表达式的一部分);
若是符号,则判断该符号与栈顶符号的优先级,优先级低于栈顶符号(或是右括号),则栈顶元素出栈,并输出,当前符号进栈;(右括号匹配左括号,将其中的符号依次出栈
直到遍历完中缀表达式,栈为空,最终输出后缀表达式为止。
在这里插入图片描述
整个转换过程,充分利用了栈的后进先出特性,完成了程序中输入的四则运算中缀表达式向后缀表达式的转换。

3.参考文献

《大话数据结构》-- 程杰 著

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柏常青

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值