【数据结构与算法】栈的三种表达式 前缀、中缀、后缀表达式(逆波兰表达式)

简介

  前缀表达式、中缀表达式、后缀表达式都是四则运算的表达方式,用以四则运算表达式求值,即数学表达式的求值。

 

前缀表达式

  前缀表达式叫做波兰表达式。

  前缀表达式的运算符位于操作数之前,它的符号并不是按照在表达式里所出现的顺序, 例如:(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,由此得出最终结果。

 

posted @ 2018-09-12 18:00  songguojun  阅读(804)  评论(0编辑  收藏  举报