利用棧將中綴轉(zhuǎn)為后綴

大概算法思路如下:

1)如果遇到操作數(shù),我們就直接將其輸出。
2)如果遇到操作符,則我們將其放入到棧中,遇到左括號時(shí)我們也將其放入棧中。
3)如果遇到一個(gè)右括號,則將棧元素彈出,將彈出的操作符輸出直到遇到左括號為止。注意,左括號只彈出并不輸出。
4)如果遇到任何其他的操作符,如(“+”, “*”,“(”)等,從棧中彈出元素直到遇到發(fā)現(xiàn)更低優(yōu)先級的元素(或者棧為空)為止。彈出完這些元素后,才將遇到的操作符壓入到棧中。有一點(diǎn)需要注意,只有在遇到" ) "的情況下我們才彈出" ( ",其他情況我們都不會(huì)彈出" ( "。
5)如果我們讀到了輸入的末尾,則將棧中所有元素依次彈出。

簡易算法如下:

import java.util.Scanner;
import java.util.Stack;

public class MidToAfter {

public void inFixtoAfter() {

    Stack<Character> s = new Stack<Character>();
    String expression = "a+b*c+(d*e+f)*g=";
    Character token;
    int i = 0;

// Scanner sc = new Scanner(System.in);
// expression = sc.next();

    while ((token = expression.charAt(i++)) != '=') {
        if (token >= 'a' && token <= 'z') {
            System.out.print(token + " ");
        } else {
            switch (token) {
                case ')':
                    while (!s.empty() && s.peek() != '(') {
                        System.out.print(s.pop() + " ");
                    }
                    s.pop();
                    break;
                case '(':
                    s.push(token);
                    break;
                case '*':
                case '/':
                    while (!s.empty() && s.peek() != '+'
                            && s.peek() != '-' && s.peek() != '(') {
                        System.out.print(s.pop() + " ");
                    }
                    s.push(token);
                    break;
                case '+':
                case '-':
                    while (!s.empty() && s.peek() != '(') {
                        System.out.print(s.pop() + " ");
                    }
                    s.push(token);
                    break;
            }
        }
    }

    while (!s.empty()) {
        System.out.print(s.pop() + " ");
    }
    System.out.println();

}

public static void main(String[] args) {
    new MidToAfter().inFixtoAfter();

}

}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容