package dataStructure_7_PreAndPost; import java.util.ArrayList; import java.util.List; import java.util.Stack; public class InfixToPostfix { public static List<Token> convert(String expr){ List<Token> result = new ArrayList<Token>(); Stack<Token> operatorStack = new Stack<Token>(); TokenParser parser = new TokenParser(); List<Token> list = parser.parse(expr); for (Token token : list) { if(token.isNumber()){ result.add(token); }else if(token.isOperator()){ if(operatorStack.isEmpty()){ operatorStack.push(token); }else{ Token topOperator = operatorStack.pop(); if(!token.hasHigherPriority(topOperator)){ list.add(topOperator); while(true){ if(!operatorStack.isEmpty()){ Token top = operatorStack.pop(); if(!token.hasHigherPriority(top) && !operatorStack.isEmpty()){ list.add(top); }else{ break; } } } operatorStack.push(token); }else{ operatorStack.push(topOperator); operatorStack.push(token); } } } } return result; } public static void main(String[] args) { List<Token> result = convert("3+2*5+6"); for (Token token : result) { System.out.println(token); } } }