请给出利用栈来实现一个简单计算器,处理包含加减乘除的表达式的代码
时间: 2024-10-14 21:09:54 浏览: 26
可以使用栈数据结构来实现一个基于逆波兰表示法(RPN,也称为后缀表达式)的简单计算器。这种算法不依赖于传统的运算符优先级规则,而是将操作数压入栈,在遇到运算符时弹出最近的两个操作数进行计算,然后把结果再次压回栈。
以下是一个简单的 Python 示例:
```python
def calculate(expression):
stack = []
operators = {
'+': lambda x, y: x + y,
'-': lambda x, y: x - y,
'*': lambda x, y: x * y,
'/': lambda x, y: x / y if y != 0 else 'Error', # 避免除零错误
}
tokens = expression.split()
for token in tokens:
if token.isdigit(): # 如果是数字,直接压入栈
stack.append(int(token))
elif token in operators: # 如果是运算符,弹出两个操作数并计算
b = stack.pop()
a = stack.pop()
result = operators[token](a, b)
stack.append(result)
return stack[0] # 最后栈里剩下的就是最终结果
# 测试示例
expression = "4 5 + 6 *"
print(calculate(expression)) # 输出:36
```
这个代码会按照RPN规则解析表达式,并利用栈来存储和计算中间结果。注意,这只是一个基础版本,实际应用中可能需要处理更复杂的表达式,如括号、优先级等。
阅读全文