算数表达式求解
求解算数表达式的一般思路是使用两个栈:一个操作数栈和一个运算符栈。通过遍历
表达式,将操作数和运算符分别入栈,并根据运算符的优先级进行计算,最终得到表达式
的结果。以下是使用栈求解算数表达式的步骤:
1. 创建一个操作数栈和一个运算符栈。
2. 遍历表达式中的每个字符:
o 如果当前字符是数字,将其解析为一个操作数,并将操作数压入操作数
栈。
o 如果当前字符是运算符,将其与运算符栈的栈顶元素进行比较:
▪ 如果运算符栈为空或栈顶运算符为左括号"(",直接将当前运算符压
入运算符栈。
▪ 如果当前运算符的优先级高于栈顶运算符,将当前运算符压入运算
符栈。
▪ 否则,将运算符栈的栈顶元素弹出,进行运算,并将结果压入操作
数栈,直到当前运算符的优先级大于栈顶运算符或栈顶运算符为左
括号"("。
o 如果当前字符是左括号"(",将其压入运算符栈。
o 如果当前字符是右括号")",则不断从运算符栈弹出运算符,进行运算,并
将结果压入操作数栈,直到遇到左括号"("。
3. 遍历完整个表达式后,将剩余的运算符栈中的运算符依次弹出,进行运算,并将结
果压入操作数栈。
4. 最终,操作数栈中的唯一元素即为表达式的求解结果。
下面是一个简单的 Java 代码示例,演示了如何使用栈求解算数表达式:
import java.util.Stack;
public class ArithmeticExpressionSolver {
public static int evaluateExpression(String expression) {
Stack<Integer> operandStack = new Stack<>();
Stack<Character> operatorStack = new Stack<>();
for (int i = 0; i < expression.length(); i++) {
char ch = expression.charAt(i);
if (Character.isDigit(ch)) {
// 处理操作数
int operand = 0;
while (i < expression.length() &&
Character.isDigit(expression.charAt(i))) {