后缀表达式计算
时间: 2023-06-28 20:05:53 浏览: 78
后缀表达式也被称为逆波兰表达式,它是一种不含括号的数学表达式,其中运算符在操作数之后。例如,中缀表达式"3 + 4 * 2 / (1 - 5)" 可以写成后缀表达式"3 4 2 * 1 5 - / +"
计算后缀表达式的算法如下:
1. 创建一个空栈
2. 从左到右扫描后缀表达式
3. 如果当前读入的是操作数,则将其压入栈中
4. 如果当前读入的是运算符,则从栈中弹出两个操作数,并根据运算符做相应的计算,然后将结果压入栈中
5. 重复步骤2-4,直到表达式结束
6. 最终栈中只剩下一个元素,它就是表达式的值
下面是一个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
```
你可以调用这个函数并传入一个后缀表达式,例如"3 4 2 * 1 5 - / +",它将返回计算结果。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)