栈应用——逆波兰式表达式的值

问题描述:

    计算给定的逆波兰表达式(即后缀表达式)的值。

事实上,二元运算的前提下,中缀表达式可以对应一棵二叉树;逆波兰式即该二叉树后序遍历的结果。

 

分析思路:

  • 如果当前是操作数,则直接入栈;
  • 如果当前是操作符,则栈顶的两个元素弹出,然后与当前操作符运算后入栈。

 

Code:

    /**
     * 给出一个逆波兰式,计算该表达式的值
     * @param s
     * @return
     */
    public int getTheValueOfRPN(String s) {
        char[] ch = s.toCharArray();
        Stack<Integer> stack = new Stack<Integer>();
        for(int i=0; i<ch.length; i++) {
            if(isOperator(ch[i])) {
                int v1 = stack.peek();
                stack.pop();
                int v2 = stack.peek();
                stack.pop();
                if(ch[i] == '+')
                    stack.push(v1 + v2);
                else if(ch[i] == '-')
                    stack.push(v1 - v2);
                else if(ch[i] == '*')
                    stack.push(v1 * v2);
                else 
                    stack.push(v1 / v2);
            }
            else 
                stack.push(Integer.valueOf(ch[i]-48));
            
        }
        return stack.pop();
    }

    private boolean isOperator(char c) {
        // TODO Auto-generated method stub
        if(c == '+' || c == '-' || c == '*' || c == '/')
            return true;
        return false;
    }

 

posted @ 2016-04-30 15:17  江湖小妞  阅读(673)  评论(0编辑  收藏  举报