返回

在栈的护航下,行走在数字世界的计算之旅

闲谈

栈:理解其内在机制

栈,这种有着悠久历史的数据结构,以其先进后出的特点在计算机科学领域占据着不可替代的地位。想象一下一个套娃,你只能从最上面取下娃娃,而不能直接接触到里面的娃娃。栈遵循的就是这一原则:后加入的元素,必须先被取出,才能接触到之前加入的元素。

用栈构建简易计算器:将抽象化为现实

现在,让我们携手构建一个简易计算器,用栈来承载数字和运算符,踏上求解表达式之旅。

  1. 将表达式拆解为数字和运算符:

    我们将表达式分成数字和运算符两个部分。数字可以直接压入栈中,而运算符则需要等待时机。

  2. 遇到数字,直接压栈:

    当我们读到数字时,无需犹豫,直接将它压入栈中。

  3. 遇到运算符,等待时机:

    当我们读到运算符时,我们需要等待另一个数字出现。一旦有了第二个数字,我们就可以进行计算,并将结果压入栈中。

  4. 不断循环,直至表达式结束:

    我们不断重复上述步骤,直到表达式结束。此时,栈顶的元素就是表达式的值。

栈:实现代码的展现

为了让栈的计算过程更加清晰,我们用代码来展现:

import java.util.Stack;

public class SimpleCalculator {

    public static void main(String[] args) {
        String expression = "100+100/5-4";
        System.out.println(evaluateExpression(expression));
    }

    private static int evaluateExpression(String expression) {
        Stack<Integer> numbers = new Stack<>();
        Stack<Character> operators = new Stack<>();

        for (char c : expression.toCharArray()) {
            if (Character.isDigit(c)) {
                int number = c - '0';
                numbers.push(number);
            } else if (c == '+' || c == '-' || c == '*' || c == '/') {
                operators.push(c);
            } else if (c == ')') {
                int operand2 = numbers.pop();
                int operand1 = numbers.pop();
                char operator = operators.pop();

                int result = calculate(operand1, operand2, operator);
                numbers.push(result);
            }
        }

        return numbers.pop();
    }

    private static int calculate(int operand1, int operand2, char operator) {
        switch (operator) {
            case '+':
                return operand1 + operand2;
            case '-':
                return operand1 - operand2;
            case '*':
                return operand1 * operand2;
            case '/':
                return operand1 / operand2;
            default:
                throw new IllegalArgumentException("Invalid operator: " + operator);
        }
    }
}

结语:踏上计算之旅

栈,一种看似简单的结构,却蕴含着强大的计算能力。通过构建简易计算器,我们得以一窥栈的魅力,领略算法之美。无论是在计算机科学领域,还是在日常生活中,栈都能为我们提供高效的解决方案。希望这篇博文能激发你的灵感,助你踏上计算之旅,探索更多精彩。