逆波兰表达式/中缀表达式

逆波兰表达式/中缀表达式

1.先定义一个方法分割字符串每个数据,然后存到集合里面
2.然后在新的方法中定义 一个栈来存储数据
具体实现如下:

//字符串转换为list集合
    public static List<String> getString(String str)
    {
        //方便为了测试,用空格隔开
        String [] res=str.split(" ");
        //创建集合存储
        List<String> list=new ArrayList<String>();

        for (String red:res) {
            list.add(red);
            
        }

        return list;
    }
    
    //计算逆波兰表达式
    public static int ca(List<String> list)
    {
        //定义一个集合存储数据
        Stack<String> stack=new Stack<>();
        //遍历集合
        for (String item:list)
        {
            //判断是否为数字,是放进去
            if (item.matches("\\d+")){
                stack.push(item);
            //否则丛stack弹出两个数据进行运算
            }else
            {
                //第二个数据
                int num2=Integer.parseInt(stack.pop());
                //第一个数
                int num1=Integer.parseInt(stack.pop());
                int res=0;
                switch (item){
                    case "+":
                        res=num1+num2;
                        break;
                    case "-":res=num1-num2;
                    break;
                    case "*":res=num1*num2;
                    break;
                    case "/": res=num1/num2;
                    break;
                    default:throw new RuntimeException("符号有误");
                }
                //最后的后果
                stack.push(res+"");
            }
        }
        return Integer.parseInt(stack.pop());
    }

在这里插入图片描述

posted @ 2020-10-08 13:37  Latteitcjz  阅读(136)  评论(0)    收藏  举报