前缀,中缀,后缀表达式规则
前缀表达式:
- 前缀表达式又称之为: 波兰表达式
- 前缀表达式的运算符位于操作数之前
前缀表达式举例:
(3 + 4) x 5 - 6 转换为前缀表达式之后是: - x + 3 4 5 6
前缀表达式的计算机求值:
从右至左扫描表达式,遇到数字时,将数字压入堆栈中,遇到运算符的时候就弹出栈顶的两个数,用运算符对它们做相应的计算,并将结果入栈,重复上述过程直到遍历到表达式的最左端,最后运算得出的值即为表达式的结果
中缀表达式:
-
中缀表达式就是常见的运算表达式,如(3 + 4) x 5 - 6
-
中缀表达式的求值是我们人类最熟悉的,但是对于计算机来说却不好操作,因此,在计算中缀表达式的结果的时候往往会将其转换成其他表达式来操作(一般情况之下都是转换成为后缀表达式)
- 前面的用栈实现总和计算器的时候我们处理的就是中缀表达式,中缀表达式处理起来比较麻烦
后缀表达式:
- 后缀表达式又称为"逆波兰表达式" , 与前缀表达式相似,只是运算符位于操作数之后
后缀表达式举例:
(3 + 4) x 5 - 6 转换为后缀表达式就是: 3 4 + 5 * 6 -
后缀表达式的计算机求值:
从左至右扫描表达式,遇到数字时,将数字压入堆栈中,遇到运算符时,弹出栈顶的两个数(栈顶元素和次栈顶元素),用运算符对它们做相应的运算,并将结果入栈 , 重复上述的过程直到遍历到表达式的最右边, 最后运算得出的值即为表达式的运算结果
补充:
注意 : 我们使用中缀表达式进行计算机求值的时候要使用两个栈,但是使用后缀表达式和前缀表达式求值的时候只需要使用一个栈
前缀表达式就是运算符在前面, 后缀表达式就是运算符在数值的后面 , 中缀表达式就是运算符在数值的中间
- 但是注意: 我们这里说的前缀和后缀表达式的运算符在前面和在后面并不是完全就在数值的后面 —> 这里我们以后缀表达式为例: 我们是这次的运算的数值在前面,这次运算运算符在后面,但是这个运算符后面可能还会有其他的数值,而这些数值的运算符在它们的后面
- 总结一下: 其实就是中缀表达式就是两个数值之间就是运算符,而后缀表达式就是数值在前面,运算符在后面(前缀表达式和后缀表达式之间可以进行类比)
对于前缀和后缀表达式的计算机求值的思路简记:
- 我们肯定是要将数值入栈,然后将符号入栈,所以我们就可以从而确定执行的方向,是从左至右还是从右至左,至于具体的运算的细节其实两种方式都是一样的: 都是遇到运算符之后就弹出栈顶的两个数值,然后进行一个运算,运算之后将结果再入栈 , 直到最后栈中就会只剩下一个数值, 这个数值就是我们要求的最终结果
- 注意: 前缀是从右向左扫描, 而后缀是从左向右扫描