【数据结构与算法】栈的三种表达式 前缀、中缀、后缀表达式(逆波兰表达式)
简介
前缀表达式、中缀表达式、后缀表达式都是四则运算的表达方式,用以四则运算表达式求值,即数学表达式的求值。
前缀表达式
前缀表达式叫做波兰表达式。
前缀表达式的运算符位于操作数之前,它的符号并不是按照在表达式里所出现的顺序, 例如:(3 + 4)x 5 - 6 所对应的前缀表达式是 - x + 3 4 5 6
前缀表达式的计算机计算过程
从右至左扫描表达式,当遇到数字时候,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素和次顶元素,也就是栈顶前面两个元素),并将结果入栈。重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果
例如:(3 + 4)x 5 - 6 所对应的前缀表达式是 - x + 3 4 5 6
1.从右至左扫描,将6、5、4、3压入堆栈
2.遇到+运算符,因此弹出3和4(3为栈顶元素,4为次顶元素,注意与后缀表达式做比较),计算出3+4的值,得7,再将7入栈。
3.接下来是×运算符,因此弹出7和5,计算出7×5=35,将35入栈。
4.最后是-运算符,计算出35-6的值,即29,由此得出最终结果。
中缀表达式
中缀表达式就是最常见的运算表达式,如 (3+4) × 5 - 6。中缀表达式是我们最熟悉的,但是对于计算机是不太好处理的,在计算过程中一般会将中缀表达式转换成其他表达式来操作,比如后缀表达式。
后缀表达式
后缀表达式叫做逆波兰表达式,和前缀表达式是相反的,它表达式里的运算符都是位于操作符之后的,例如(3+4) × 5 - 6对应的后缀表达式就是 3 4 + 5 x 6 - 。
再比如
正常数学表达式 | 后缀表达式 |
a + b | a b + |
a + (b - c) | a b c - + |
a + ( b - c ) x d | a b c - d x + |
a + d x (b - c) | a d b c - x + |
a = 1 + 3 | a 1 3 + = |
后缀表达式的计算机计算过程
从左至右扫描表达式,当遇到数字时候,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素和栈顶元素),并将结果入栈。重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。
例如:(3 + 4)x 5 - 6 所对应的后缀表达式是 3 4 + 5 x 6 -
1.从右至左扫描,将6、5、4、3压入堆栈
2.遇到+运算符,因此弹出3和3(4为栈顶元素,3为次顶元素),计算出4+3的值,得7,再将7入栈,这时候栈底是7。
3.将5入栈。
4.接下来是×运算符,因此弹出7和5,计算出5×7=35,将35入栈。
5.将6入栈。
6.最后是-运算符,计算出35-6的值,即29,由此得出最终结果。