中序表達式
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(); }