用栈实现简单表达式计算

建立两个栈,一个用来存放表达式中的运算符号,一个用来存放表达式中的值。

遍历表达式,遇到左括号不做处理,遇到值放入 vals 栈中,遇到符号放到 ops 栈中。

当遇到右括号时,取出 ops 栈中的符号对 vals 栈中弹出的两个值进行运算,运算结果压入到 vals 栈中。

public class Evaluate
{
    public static void main(String[] args)
    {
        String expression = "(1+((2+3)*(4*5)))";
        System.out.println(expression);

        Stack<String> ops = new Stack<String>();
        Stack<Double> vals = new Stack<Double>();

        for(int i = 0; i < expression.length(); i++)
        {
            String s = expression.substring(i, i+1);
            if (s.equals("(")); 
            else if (s.equals("+")) ops.push(s);
            else if (s.equals("*")) ops.push(s);
            else if (s.equals(")"))
            {
                String op = ops.pop();
                if (op.equals("+")) vals.push(vals.pop() + vals.pop());
                else if (op.equals("*")) vals.push(vals.pop() * vals.pop());
            }
            else vals.push(Double.parseDouble(s));
        }
        System.out.println(vals.pop());
    }
}

参考

https://class.coursera.org/algs4partI-010/lecture/23

转载于:https://my.oschina.net/lvyi/blog/654584

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值