后缀表达式与四则运算

栈—四则运算表达式求值

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.参考文献

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

猜你喜欢

转载自blog.csdn.net/beauthy/article/details/105375935