中缀转后缀表达式java实现

看了栈相关知识后摸索的仅包含+、-、*、/、(、)这6个符号的中缀表达式转后缀表达式方法。

    //a+b*c+(d*e+f)*g    ret: abc*+de*f+g*+
    //(a+b*c)/d+e*f+g    ret: abc*+d/ef*+g+
    // + - * / ( )
    public static List<String> infix2postfix(String[] infix){
        List<String> ret = new ArrayList<>();
        Deque<String> symbols = new LinkedList<>();
        for(String s:infix){
            if(s.equals("+") || s.equals("-")){
                while (!symbols.isEmpty()){
                    String top = symbols.peek();
                    if(top.equals("(")){
                        break;
                    }else{
                        ret.add(symbols.pop());
                    }
                }
                symbols.push(s);
            }else if(s.equals("*") || s.equals("/")){
                while (!symbols.isEmpty()){
                    String top = symbols.peek();
                    if(top.equals("(")){
                        break;
                    }else if(top.equals("*") || top.equals("/")){
                        ret.add(symbols.pop());
                    }else {
                        break;
                    }
                }
                symbols.push(s);
            }else if(s.equals("(")){
                symbols.push(s);
            }else if(s.equals(")")){
                while (!symbols.isEmpty()){
                    String top = symbols.pop();

                    if(!top.equals("(")){
                        ret.add(top);
                    }else {
                        break;
                    }
                }
            }else {
                //数字
                ret.add(s);
            }

        }
        while (!symbols.isEmpty()){
            ret.add(symbols.pop());
        }
        return ret;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容