后缀表示法(RPN)
通常将运算符写在运算量之间,例如a+b,这种表示法称为中缀表示法。后缀表示法又称逆波兰表示法,它是波兰逻辑学家卢卡西维奇发明的一种表示表达式的方法。又叫逆波兰(百度百科)
那么后缀表示法如何写出来的呢?
先看一个简单的例子
一个中缀四则表达式:
9+(3-1)x3+10/2
变成后缀表达式:
9 3 1 - 3 x + 10 2 / +
那么它是怎么变的呢?
先别急,我们先来看看计算机是如何计算后缀表达式的。
规则:
从左到右遍历表达式的每个数字和符号,遇到数字就进栈,遇到符号就将栈顶的两个数字出栈,一直获得最终的结果。
(从左1列到右看)
1 | 3 | 2 | |||||
---|---|---|---|---|---|---|---|
3 | 2 | 2 | 6 | 10 | 5 | ||
9 | 9 | 9 | 9 | 15 | 15 | 15 | 20 |
我们从左向右看:
后缀表达式前三个931都是数字!那么!进栈!!
然后他们遇到了减号!最上面两个出列!3-1=2!你给我回去!
就变成了第二列的92了。以此类推,直到最后。
中缀表达式变后缀表达式
在我们了解计算机如何去求后缀表达式之后。我们就能猜出如何去从一个中缀表达式去写一个后缀表达式
规则:
从左往右遍历
遇到数字,写它!
遇到符号,收入栈(含括号)
比较符号的优先级!然后拿出来,写它!
如此循环!
成了!
9+(3-1)x3+10/2
还是这个例子
我们可以这样思考
931
931-
931-3
931-3*
931-3*+
931-3*+10 2
931-3*+10 2/
9 3 1 - 3 * + 10 2 / +