返回

造就高效计算器:栈实现基本计算 II

前端

利用栈这个巧妙的数据结构,我们将踏上征服基本计算器 II 的旅程。有了它,复杂的数学运算将变得轻而易举,让我们深入了解其运作机制,探索如何使用栈来解决计算难题。

栈:有序数据访问的基石

栈是一种先进后出的数据结构,它遵循一个简单的规则:后进先出。就像一堆盘子,每次添加或移除盘子时,总是从栈顶操作。这种特性使得栈非常适合处理需要按顺序访问元素的情况。

使用栈构建计算器

在我们的计算器中,栈将扮演至关重要的角色。我们将把每个运算符和操作数压入栈中,然后根据运算符的优先级逐个处理它们。

  1. 输入处理: 将表达式解析为运算符和操作数,并将其压入栈中。
  2. 运算符处理: 当遇到运算符时,弹出栈顶的两个操作数,执行相应的运算,并将结果压入栈中。
  3. 优先级处理: 根据运算符的优先级确定运算顺序。例如,乘法和除法优先于加法和减法。
  4. 计算结果: 处理完所有运算符后,栈顶剩下的就是计算结果。

代码实现:揭示栈的魔力

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。它处理表达式的方式既灵活又准确,证明了栈在解决复杂数学问题中的强大功能。

掌握栈的使用不仅能提升你的编程技能,还能让你对数据结构和算法有更深入的理解。现在就动手尝试使用栈来解决自己的计算难题,解锁其在现实世界中的无限潜力。