看了栈相关知识后摸索的仅包含+、-、*、/、(、)这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;
}