中序表達式轉換后序表達式


中序表達式
1、操作數就直接入棧 輸出棧
2、操作符入操作符棧之前與棧頂操作符比較 如果當棧頂優先級高於或等於當前操作符,就出棧 進入輸出棧
3、'('直接入棧操作符棧
4、')'出棧()之間的操作符 到輸出棧

 

代碼:

 

public String infixToPostfix(String str) throws InterruptedException {
        HashMap<Character, Integer> map = new HashMap<Character, Integer>();
        map.put('+', 1);
        map.put('-', 1);
        map.put('*', 2);
        map.put('/', 2);
        map.put('(', 0);
        map.put(')', 0);
        Stack<String> dataStack = new Stack<String>();
        Stack<String> operatorStack = new Stack<String>();

        for (int i = 0; i < str.length(); i++) {
            char temp = str.charAt(i);
            if (isDigital(temp)) {
                if (dataStack.isEmpty()) {
                    dataStack.push("");
                }
                String data = dataStack.pop();
                dataStack.push(data + String.valueOf(temp));
            } else if (temp == '(') {
                operatorStack.push(String.valueOf(temp));
            } else if (temp == ')') {
                while (!operatorStack.peek().equals("(")) {
                    String oper = operatorStack.pop();
                    String data = dataStack.pop();
                    dataStack.push(data + oper);
                }
                operatorStack.pop();
            } else {
                while (!operatorStack.isEmpty()&&map.get(temp) <= map.get(operatorStack.peek().charAt(0))) {
                    String oper = operatorStack.pop();
                    String data = dataStack.pop();
                    dataStack.push(data + oper);

                }
                operatorStack.push(String.valueOf(temp));
            }

        }
        while (!operatorStack.isEmpty()) {
            String oper = operatorStack.pop();
            String data = dataStack.pop();
            dataStack.push(data + oper);
        }

        return dataStack.pop();
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM