Java 利用栈计算后序表达式
Java 利用栈计算后序表达式
假设输入的后序表达式以空格作为分隔符
思路
- 创建一个栈用来存储操作数
- 顺序读取表达式输入
- 遇到操作数就压入栈
- 遇到 + - * / 时,弹出两个操作数,弹出的第一个操作数是右操作数,第二个是左操作数,用两个操作数进行相应的运算,将运算结果压入栈
- 最终栈中剩下的那个数就是计算结果
代码
import java.util.Scanner;
import java.util.Stack;
public class EvaluatePostfix {
public static void main(String[] args) {
Stack<Double> stack = new Stack<>();
Scanner s = new Scanner(System.in);
while(s.hasNext()) {
String str = s.next();
if(str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/")) {
double val = stack.pop();
switch(str) {
case "+" : val = stack.pop() + val; break;
case "-" : val = stack.pop() - val; break;
case "*" : val = stack.pop() * val; break;
case "/" : val = stack.pop() / val;
}
stack.push(val);
}else stack.push(Double.parseDouble(str));
}
System.out.println(stack.pop());
}
}
后序表达式中两个操作数加上紧随其后的一个操作符可以看成是整个表达式中的一个操作数
参考资料
[1] Robert Sedgewick and Kevin Wayne -> https://algs4.cs.princeton.edu/13stacks/Evaluate.java.html