Dijkstra的双栈算术表达式

//Dijkstra的双栈算术表达式
    public static Double dijkstra(String str){
        //创建双栈,一个存储运算符,一个存储操作数
        Stack vals = new Stack();
        Stack op = new Stack();

        char[] ch = str.toCharArray();
        /*
        * 遍历表达式字符数组
        * 遇到左括号省略,
        * 遇到操作数压如操作数栈
        * 遇到预算符压人运算符栈
        * 遇到右括号弹出一个操作数,弹出一个操作符
        * 然后再弹出一个操作数根据弹出的运算符进行运算,运算的结果再次压人操作数栈中
        * 按照此顺序遍历完成
        * */
        for(int i = 0;i < ch.length;i++){
            if(ch[i] == '+') op.push(ch[i]);
            else if(ch[i] == '-') op.push(ch[i]);
            else if(ch[i] == '*') op.push(ch[i]);
            else if(ch[i] == '/') op.push(ch[i]);
            else if(ch[i] == '(');
            else if(ch[i] == ')'){
                //进行运算
                char o = op.pop();
                Double val = vals.pop();
                if(o == '+') val = val + vals.pop();
                else if(o == '-') val = vals.pop() - val;
                else if(o == '*') val = vals.pop() * val;
                else if(o == '/') val = vals.pop() / val;
                //结果压人操作数栈
                vals.push(val);
            }else{
                vals.push(Double.parseDouble(Character.toString(ch[i])));
            }
        }
        return vals.pop();
    }

你可能感兴趣的:(Dijkstra的双栈算术表达式)