1. 程式人生 > 其它 >中綴表示式轉為字尾表示式

中綴表示式轉為字尾表示式

  

/**
 * Created With IntelliJ IDEA.
 * Descriptions:
 * 1、定義一個棧stack,用來接收運算子;定義一個char型別陣列chars,用於接收輸出結果
 * 2、從左到右遍歷字串,遇到字元新增到輸chars,遇到運算子棧為空入棧,不為空,
 * 當前運算子A和棧頂運算子B比較,如果A的優先順序大於B,那麼A入棧,否則A出棧,並新增到chars,B入棧
 * 3、遇到左括號入棧,右括號則進行出棧操作,直到匹配到左括號,出棧結束
 * 4、將棧中剩餘元素加入到chars中
 * User:Mr.Du
 * Date:2021/6/19
 * Time:21:22
 
*/
/**
     *
     * @param s        輸入表示式
     * @param stack   儲存操作符和括號
     * @return
     */
    public static String infixToPostFix(String s, Stack<Character> stack){
        int index = 0;
        char[] tmp = s.toCharArray();
        char[] chars = new char[s.length()];
        for(int i = 0;i < s.length();i++){
// (a+b)*c+d*(e+f) if(tmp[i] >= '0' && tmp[i] <= '9'){ chars[index++] = tmp[i]; }else if(tmp[i] == '('){ stack.add(tmp[i]); }else if(tmp[i] == '+' || tmp[i] == '-' || tmp[i] == '*' || tmp[i] == '/'){
if(!stack.isEmpty()){ char c = stack.peek(); if(c == '('){ stack.push(tmp[i]); } else if(getPriority(tmp[i],c)){ stack.push(tmp[i]); }else{ chars[index++] = c; stack.pop(); stack.push(tmp[i]); } }else{ stack.push(tmp[i]); } }else if(tmp[i] == ')'){ char c; while((c = stack.pop()) != '('){ chars[index++] = c; } } } while(!stack.isEmpty()){ chars[index++] = stack.pop(); } return String.valueOf(chars); } /** * 比較算術運算子大小 * @param a * @param b * @return true代表a的優先順序高於b */ public static boolean getPriority(char a,char b){ if((a == '*' || a == '/') && (b == '+' || b == '-')) return true; return false; }