返回
造就高效计算器:栈实现基本计算 II
前端
2023-11-01 17:15:29
利用栈这个巧妙的数据结构,我们将踏上征服基本计算器 II 的旅程。有了它,复杂的数学运算将变得轻而易举,让我们深入了解其运作机制,探索如何使用栈来解决计算难题。
栈:有序数据访问的基石
栈是一种先进后出的数据结构,它遵循一个简单的规则:后进先出。就像一堆盘子,每次添加或移除盘子时,总是从栈顶操作。这种特性使得栈非常适合处理需要按顺序访问元素的情况。
使用栈构建计算器
在我们的计算器中,栈将扮演至关重要的角色。我们将把每个运算符和操作数压入栈中,然后根据运算符的优先级逐个处理它们。
- 输入处理: 将表达式解析为运算符和操作数,并将其压入栈中。
- 运算符处理: 当遇到运算符时,弹出栈顶的两个操作数,执行相应的运算,并将结果压入栈中。
- 优先级处理: 根据运算符的优先级确定运算顺序。例如,乘法和除法优先于加法和减法。
- 计算结果: 处理完所有运算符后,栈顶剩下的就是计算结果。
代码实现:揭示栈的魔力
import operator
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def is_empty(self):
return not self.items
def evaluate(expression):
stack = Stack()
operators = {"+": operator.add, "-": operator.sub, "*": operator.mul, "/": operator.truediv}
for token in expression.split():
if token in operators:
operand2 = stack.pop()
operand1 = stack.pop()
operation = operators[token]
result = operation(operand1, operand2)
stack.push(result)
else:
stack.push(float(token))
return stack.pop()
if __name__ == "__main__":
expression = "10 + 20 * 30 - 40 / 5"
result = evaluate(expression)
print("计算结果:", result)
总结:栈的计算力量
通过利用栈的先进后出特性,我们可以构建一个高效的基本计算器 II。它处理表达式的方式既灵活又准确,证明了栈在解决复杂数学问题中的强大功能。
掌握栈的使用不仅能提升你的编程技能,还能让你对数据结构和算法有更深入的理解。现在就动手尝试使用栈来解决自己的计算难题,解锁其在现实世界中的无限潜力。