Ex1_3_11 计算后序表达式
import edu.princeton.cs.algs4.StdIn;import edu.princeton.cs.algs4.StdOut;public class Ex1_3_11 { public static void main(String[] args){ Stack<Double> vols = new Stack<>(); while (!StdIn.isEmpty()){ String s = StdIn.readString(); double vol = 0; switch (s){ case "+": vol = vols.pop() + vols.pop(); vols.push(vol); break; case "-": vol = -vols.pop() + vols.pop(); vols.push(vol); break; case "*": vol = vols.pop() * vols.pop(); vols.push(vol); break; case "/": vol = 1/vols.pop() * vols.pop(); vols.push(vol); break; case "sqrt": vol = Math.sqrt(vols.pop()); vols.push(vol); break; default: vol = Double.parseDouble(s); vols.push(vol); break; } } StdOut.println(vols.pop()); }}
要点:
- 使用双栈法变形
- 注意pop出的顺序