美文网首页
送外卖小公司OA

送外卖小公司OA

作者: manayuan | 来源:发表于2018-10-24 14:56 被阅读0次

中缀表达式转后缀表达式的方法:

  • 遇到操作数:直接输出(添加到后缀表达式中)
  • 栈为空时,遇到运算符,直接入栈
  • 遇到左括号:将其入栈
  • 遇到右括号:执行出栈操作,并将出栈的元素输出,直到弹出栈的是左括号,左括号不输出。
  • 遇到其他运算符:加减乘除:弹出所有优先级大于或者等于该运算符的栈顶元素,然后将该运算符入栈
  • 最终将栈中的元素依次出栈,输出。

输入是用space分割的expression,数字可以是negative number,不用处理括号

public class EvalExpression {
    public static void main(String[] args) {
        String exp = "6 / 3 / 2";
        int res = eval(exp);
        System.out.println(res);
    }
    static int eval(String exp) {
        String[] tokens = exp.split(" ");
        Stack<Integer> nums = new Stack<Integer>();
        Stack<String> operators = new Stack<String>();
        
        Set<String> operand = new HashSet<String>();
        operand.add("+");
        operand.add("-");
        operand.add("*");
        operand.add("/");
        
        for (String token : tokens) {
            if (operand.contains(token)) {
                if (operators.isEmpty()) {
                    operators.push(token);
                }
                else {
                    if (token.equals("+") || token.equals("-")) {
                        while (! operators.isEmpty()) {
                            String tmp = operators.pop();
                            int num2 = nums.pop(), num1 = nums.pop();
                            nums.push(operate(num1, num2, tmp));
                        }                        
                    }
                    if (token.equals("*") || token.equals("/")) {
                        while (! operators.isEmpty() && (operators.peek().equals("*") || operators.peek().equals("/"))) {
                            String tmp = operators.pop();
                            int num2 = nums.pop(), num1 = nums.pop();
                            nums.push(operate(num1, num2, tmp));
                        } 
                    }
                    operators.push(token);
                }
            }
            else {
                nums.push(Integer.parseInt(token));
            }
        }
        while (! operators.isEmpty()) {
            String tmp = operators.pop();            
            int num2 = nums.pop(), num1 = nums.pop();
            nums.push(operate(num1, num2, tmp));
        }
        return nums.pop();
    }
}

相关文章

  • 送外卖小公司OA

    中缀表达式转后缀表达式的方法: 遇到操作数:直接输出(添加到后缀表达式中) 栈为空时,遇到运算符,直接入栈 遇到左...

  • 送外卖

    深夜1:25 用户301:你好,请问你们打烊了吗?还可以送餐吗? 正宗兰州拉面:您好,亲,我们24小时营业,送餐上...

  • 送外卖

    姐姐他们年初开始做外卖。于是,当时身怀六甲的我就有了段外卖员的经历。 每天中午11点半至1点钟,是外卖的高峰.预订...

  • 送外卖

    一 东湖学院的外卖终于卸了,我的快乐似乎结束了。曾有好友戏说我顽劣成性,确实有点,比如这东湖学院的外卖,就...

  • 送外卖

    方芳,中原焦点团队,网络中级23期坚持分享第276天 约练1次 共81次 昨天晚上,我拉着我的同学来家里,在...

  • 送外卖

    店里接了单外卖,3份炒粉,4份粥(三种粥)(因为要煮5锅,当时只有一个师父和切配,所以出餐较慢) 换了3个骑手,都...

  • 送外卖

    第一次来城里,在一家小餐厅工作,由于外卖员临时有事,让我帮忙送一下外卖。这任务对我来说很艰难,可能要花好长...

  • 送外卖

    今天跟老妈视频,说老二下班去送外卖了。 老二这个性格也该锻炼了,30多岁的大男人跟陌生人说句话都会脸红。别看他是我...

  • 大学生送外卖,外卖行业会怎样?

    大家常常聊起送外卖的话题,争议点不是因为送外卖,而是谁去送外卖。 有人说,大学毕业生送外卖是教育资源的浪费。 那反...

  • 对BAT送外卖的一点看法

    bat都去送外卖了,太丢人了,哪个国家的互联网巨头去送外卖啊,微软和谷歌怎么不去送外卖,让华为去送外卖还不如让任正...

网友评论

      本文标题:送外卖小公司OA

      本文链接:https://www.haomeiwen.com/subject/epfxtqtx.html