算法的学习之路(1):stack的双栈算术运算操作

来源:互联网 发布:破解激活码软件 编辑:程序博客网 时间:2024/06/06 03:53

stack可以用来进行算术运算的操作,将操作数与运算符号分别放入两个stack中,若遇到“(”,则可以无视掉(前提是需要确保“()“是对应的,当然为了确保括号的配对,也可以用stack来实现 如图)如果遇到运算符,则压栈,当喷到“)”时,说明遇到了一个括号,需要将括号的内容计算出来,然后将新计算的结果作为新的元素压栈,可以通过将操作数的栈中的元素弹栈,与运算符栈弹栈进行组合运算的方式得到括号中的数的运算结果,实习代码如下:

public static void main(String[] args) {        Stack<String> ops  = new Stack<String>();        Stack<Double> vals = new Stack<Double>();        while(!System.in.toString().isEmpty()){            String s = System.in.toString();            if       (s.equals("("))               ;            else if(s.equals("+"))    ops.push(s);            else if(s.equals("-"))    ops.push(s);            else if(s.equals("*"))    ops.push(s);            else if(s.equals("/"))    ops.push(s);            else if(s.equals(")")){                String op = ops.pop();                            double val = vals.pop();                if       (op.equals("+"))    val = val + vals.pop();                else if(op.equals("-"))    val = val - vals.pop();                else if(op.equals("*"))    val = val * vals.pop();                else if(op.equals("/"))    val = val / vals.pop();                vals.push(val);            }            else vals.push(Double.parseDouble(System.in.toString()));        }
1 0