1. 程式人生 > >Dijkstra的雙棧算術表達式求值算法

Dijkstra的雙棧算術表達式求值算法

pre ble alua nbsp 算術 如果 ack 壓入 rar

 1      public static double evaluate(String inStr) {
 2            Stack<String> ops = new Stack<String>(); //操作符棧
 3            Stack<Double> vals = new Stack<Double>(); //操作數棧
 4            char[] arr = inStr.toCharArray();
 5            for(char c : arr){ 
 6                String s =c+"";
7 if(s.equals("")); 8 else if(s.equals("(")) ops.push(s); 9 else if(s.equals("+")) ops.push(s); 10 else if(s.equals("-")) ops.push(s); 11 else if(s.equals("*")) ops.push(s); 12 else if(s.equals("/")) ops.push(s);
13 else if(s.equals(")")){//如果是 )彈出操作符和操作數,計算結果並壓入棧 14 String op = ops.pop(); 15 double v = vals.pop(); 16 if(op.equals("+")) v=vals.pop()+v; 17 else if(op.equals("-")) v=vals.pop()-v; 18 else
if(op.equals("*")) v=vals.pop()*v; 19 else if(op.equals("/")) v=vals.pop()/v; 20 vals.push(v); 21 } 22 else vals.push(Double.parseDouble(s)); 23 } 24 return vals.pop(); 25 }

Dijkstra的雙棧算術表達式求值算法