表达式求值后缀表示法
时间: 2023-11-25 18:07:41 浏览: 36
后缀表达式也被称为逆波兰表达式,是一种不需要括号来标识优先级的表达式表示方法。在后缀表达式中,操作符在操作数的后面,因此也被称为后缀表示法。下面是一个例子:
中缀表达式:3 + 4 * 2 / ( 1 - 5 ) ^ 2 ^ 3
对应的后缀表达式:3 4 2 * 1 5 - 2 3 ^ ^ / +
在后缀表达式中,操作数按照顺序排列,操作符在操作数的后面。对于上面的例子,我们可以按照以下步骤求值:
1. 读入3,将其压入栈中。
2. 读入4,将其压入栈中。
3. 读入2,将其压入栈中。
4. 遇到*操作符,弹出2和4,计算4*2=8,将8压入栈中。
5. 遇到1,将其压入栈中。
6. 遇到5,将其压入栈中。
7. 遇到-操作符,弹出5和1,计算1-5=-4,将-4压入栈中。
8. 遇到2,将其压入栈中。
9. 遇到3,将其压入栈中。
10. 遇到^操作符,弹出3和2,计算2^3=8,将8压入栈中。
11. 遇到^操作符,弹出-4和8,计算8^-4=0.000244,将0.000244压入栈中。
12. 遇到/操作符,弹出8和0.000244,计算8/0.000244=32768,将32768压入栈中。
13. 遇到+操作符,弹出3和32768,计算3+32768=32771,将32771压入栈中。
最终,栈中只剩下一个元素32771,即为表达式的值。
下面是一个Python实现后缀表达式求值的例子:
```python
def postfix_eval(postfix_expr):
operand_stack = []
token_list = postfix_expr.split()
for token in token_list:
if token.isdigit():
operand_stack.append(int(token))
else:
operand2 = operand_stack.pop()
operand1 = operand_stack.pop()
result = do_math(token, operand1, operand2)
operand_stack.append(result)
return operand_stack.pop()
def do_math(op, op1, op2):
if op == "*":
return op1 * op2
elif op == "/":
return op1 / op2
elif op == "+":
return op1 + op2
else:
return op1 - op2
```
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)