生成逆波兰表达式

来源:互联网 发布:孙志刚事件的网络舆论 编辑:程序博客网 时间:2024/05/16 13:04
 /**     * 比较当前运算符和栈顶运算符的优先级     * @param stackPeek 栈顶元素     * @param current 当前元素     * @return     */    public static boolean getPriority(String stackPeek,String current)    {        if(stackPeek.matches("[\\*\\/]") && current.matches("[\\+\\-\\*\\/]"))        {            return true;        }else if(stackPeek.matches("[\\+\\-]") && current.matches("\\+\\-"))        {            return true;        }        return false;    }    /**     * 获得后缀表达式     * @param infix 传入的中缀表达式的集合     * @return     */    public static ArrayList<String> getSuffix(ArrayList<String> infix)    {        ArrayList<String> suffix = new ArrayList<String>();//用于存储最后的后缀式        Stack<String> operator = new Stack<String>();//用于比较运算符优先级        //第一步:分离数字和运算符        for(String chs:infix)        if(Character.isDigit(chs.charAt(0)))        {//如果是数字,加入集合            suffix.add(chs);        }else{            //如果不是数字,分离括号和运算符            switch (chs.charAt(0)) {            //左括号直接入栈            case '(':                operator.push(chs);                break;            //右括号,出栈,直到左括号出栈                case ')':                while(!"(".equals(operator.peek()))                       suffix.add(operator.pop());                operator.pop();//左括号出栈                break;            default:                //如果是运算符,先比较优先级,如果当前元素的优先级低于栈顶元素,则栈顶元素出栈,当前元素出栈                //原则是保证栈顶元素的优先级最高                //如果栈顶元素优先级高,返回true,栈顶元素出栈,直到存在元素优先级低于当前元素                while(!operator.isEmpty() && getPriority(operator.peek(),chs))                    suffix.add(operator.pop());                operator.push(chs);//优先级高的栈顶元素出栈后,加入优先级更低的元素                break;            }        }        //判断栈中是否还有元素,有的话,取出        while(!operator.isEmpty())            suffix.add(operator.pop());        System.out.println("中缀式是:"+suffix);        return suffix;    }}

[(, 2, +, 3, ), *, 3, +, 9, *, 6, /, 8, +, (, 2, +, 4, /, 3, +, (, 2, +, 6, /, 5, ), )]

中缀式是:[2, 3, +, 3, *, 9, 6, *, 8, /, 2, 4, 3, /, 2, 6, 5, /, +, +, +, +, +]

原创粉丝点击