package com.coding.basic.stack.expr; import java.util.ArrayList; import java.util.List; import java.util.Stack; /** * 中序表达式转后缀表达式 * @author chenming E-mail:cm_20094020@163.com * @version 创建时间:2017年5月7日 下午4:29:06 */ public class InfixToPostfix { public static List<Token> convert(String expr) { List<Token> inFixTokens = new TokenParser().parse(expr); List<Token> postFixTokens = new ArrayList<>(); Stack<Token> opStack = new Stack<Token>(); for(Token token : inFixTokens){ if(token.isOperator()){ while(!opStack.isEmpty() && !token.hasHigherPriority(opStack.peek())){ postFixTokens.add(opStack.pop()); } opStack.push(token); } if(token.isNumber()){ postFixTokens.add(token); } } while(!opStack.isEmpty()){ postFixTokens.add(opStack.pop()); } return postFixTokens; } }