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