從左到右檢查每個(gè)字符
1。如果字符是數(shù)字,直接添加到輸出隊(duì)列中
2。如果字符是左括號(hào)(,則將其添加到堆棧中
3。如果字符是右括號(hào)),則開(kāi)始退出堆棧,依次將堆棧中的元素添加到輸出隊(duì)列,直到遇到左括號(hào)“()。左括號(hào)本身沒(méi)有排隊(duì)。如果堆棧中沒(méi)有左括號(hào),則返回匹配錯(cuò)誤。
4.如果字符是非括號(hào)運(yùn)算符,請(qǐng)將字符的優(yōu)先級(jí)與堆棧元素的頂部進(jìn)行比較。如果優(yōu)先級(jí)高于堆棧的頂部,它將被放在堆棧上,否則它將被添加到輸出隊(duì)列中。
檢查完所有表達(dá)式后,堆棧中的所有剩余元素將添加到輸出隊(duì)列中。如果堆棧包含括號(hào),則返回匹配錯(cuò)誤。
最終輸出隊(duì)列是后綴表達(dá)式。
后綴表達(dá)式求值算法?中綴表達(dá)式轉(zhuǎn)換為等效后綴表達(dá)式后,計(jì)算中不再考慮運(yùn)算符的優(yōu)先級(jí),只需從左到右掃描后綴表達(dá)式即可。具體求值步驟如下:從左到右掃描后綴表達(dá)式,取出表達(dá)式中運(yùn)算符的前兩個(gè)操作數(shù),遇到運(yùn)算符時(shí)進(jìn)行運(yùn)算,然后將結(jié)果帶回后綴表達(dá)式;繼續(xù)掃描,直到后綴表達(dá)式的最后一個(gè)表達(dá)式。例如,計(jì)算后綴表達(dá)式(ABC*def*/-)的算法是設(shè)置堆棧。開(kāi)始時(shí),堆棧為空,然后從左到右掃描后綴表達(dá)式。如果遇到運(yùn)算符,它將進(jìn)入堆棧。如果遇到運(yùn)算符,它將從堆棧中退出兩個(gè)元素,首先退出的元素將放在運(yùn)算符的右側(cè),然后退出將其放在運(yùn)算符的左側(cè),然后將結(jié)果放在堆棧中,直到掃描后綴表達(dá)式。此時(shí),堆棧中只有一個(gè)元素,這是操作的結(jié)果。例如,要查找后綴表達(dá)式的值:1282-74-/*,堆棧的更改如下:
中綴轉(zhuǎn)后綴計(jì)算表達(dá)式?首先設(shè)置運(yùn)算符的堆棧st,并且只從左側(cè)掃描中綴表達(dá)式。1如果遇到數(shù)字,請(qǐng)將其直接放在后綴表達(dá)式的末尾。2如果遇到運(yùn)算符A:如果站為空,則直接將其放在堆棧上;b:循環(huán):如果堆棧st不為空,并且堆棧頂部運(yùn)算符的優(yōu)先級(jí)大于或等于當(dāng)前運(yùn)算符,則堆棧頂部運(yùn)算符將從堆棧中取出并放在后綴表達(dá)式的末尾;c:如果堆棧st不為空,且頂層運(yùn)算符的優(yōu)先級(jí)低于當(dāng)前運(yùn)算符,則直接將運(yùn)算符放在堆棧上;重復(fù)1和2,直到掃描整個(gè)中綴表達(dá)式;如果堆棧st此時(shí)不為空,位于堆棧頂部的運(yùn)算符將逐個(gè)從堆棧中取出,并逐個(gè)放置在后綴表達(dá)式的末尾。