前缀表达式(波兰表达式)
前缀表达式的运算符位于操作数之前。
比如 (1+2)*3-4 对应的前缀表达式就是: - * + 1 2 3 4
前缀表达式的计算机求值
从右至左扫描表达式,遇到数字时,就将数字压入栈顶,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素和次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。
例如: (1+2)*3-4对应的前缀表达式就是 - * + 1 2 3 4, 针对前缀表达式求值步骤如下:
1). 从右至左扫描, 将4 3 2 1压入堆栈.
2). 遇到+运算符,因此弹出1和2(1位栈顶元素,2位次顶元素),计算出1+2的值,得3,再将3入栈
3). 接下来是*运算符,因此弹出3和3,计算出3*3=9,将9压入栈
4). 最后是 - 运算符,计算出9-4的值,即5,由此得出最终结果.
中缀表达式
中缀表达式就是我们最常见的运算表达式, (1+2)*3-4.
中缀表达式是人们最常见的形式, 但对计算机来说却不好操作,因此往往会把中缀表达式转成其他表达式来操作(一般是后缀表达式)
后缀表达式(逆波兰表达式)
同前置表达式相似,只是运算符位于操作数之后。
(1+2)*3-4的后缀表达式就是1 2 + 3 * 4 -
正常表达式 a+b , 逆波兰表达式 a b +
正常表达式 a+(b-c) , 逆波兰表达式 a b c - +
正常表达式 a+(b-c)*d , 逆波兰表达式 a b c - d * +
正常表达式 a+d*(b-c) , 逆波兰表达式 a d b c - * +
正常表达式 a=1+3 , 逆波兰表达式 a 1 3 + =
后缀表达式的计算机求值
从左至右扫描表达式,遇到数字时,就将数字压入栈顶,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素和次顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。
例如: (1+2)*3-4对应的后缀表达式就是1 2 + 3 * 4 -, 针对前缀表达式求值步骤如下:
1). 从左至右扫描, 将1 2压入堆栈.
2). 遇到+运算符,因此弹出2和1(2位栈顶元素,1位次顶元素),计算出1+2的值,得3,再将3入栈
3) 将3入栈.
4) 接下来是*运算符,因此弹出3和3,计算出3*3=9,将9入栈.
5) 将4入栈
6). 最后是 - 运算符,计算出9-4的值,即5,由此得出最终结果.