基于栈的后缀表达式求值
时间: 2023-11-10 18:08:54 浏览: 88
后缀表达式也叫逆波兰表达式,它是一种不含括号的表达式,在计算机科学中,常用于计算机程序中表达式的求值。
后缀表达式的计算过程可以使用栈来实现。具体步骤如下:
1. 从左到右扫描后缀表达式,对于每一个数字和运算符进行处理。
2. 如果是数字,则直接将其压入栈中。
3. 如果是运算符,则从栈中弹出两个数字进行运算,然后将运算结果压入栈中。
4. 重复上述步骤,直到扫描完整个后缀表达式。
5. 最后栈中只剩下一个数字,就是该后缀表达式的计算结果。
下面是一个简单的示例:
后缀表达式:3 4 + 5 *
1. 遇到 3,将其压入栈中。
2. 遇到 4,将其压入栈中。
3. 遇到 + 运算符,从栈中弹出两个数字 4 和 3,相加得到 7,将其压入栈中。
4. 遇到 5,将其压入栈中。
5. 遇到 * 运算符,从栈中弹出两个数字 5 和 7,相乘得到 35,将其压入栈中。
6. 整个后缀表达式扫描完毕,栈中只剩下一个数字 35,即为该后缀表达式的计算结果。
代码实现:
```
def evaluate_postfix(expr):
stack = []
for token in expr:
if token.isdigit():
stack.append(int(token))
else:
b = stack.pop()
a = stack.pop()
if token == '+':
stack.append(a + b)
elif token == '-':
stack.append(a - b)
elif token == '*':
stack.append(a * b)
elif token == '/':
stack.append(a / b)
return stack.pop()
```
其中,expr 是后缀表达式,stack 是一个列表用来模拟栈。对于每个数字,直接将其转换成整数并压入栈中;对于每个运算符,则从栈中弹出两个数字进行运算,并将运算结果压入栈中。最后,栈中只剩下一个数字,就是该后缀表达式的计算结果。
阅读全文