前綴,中綴,后綴表達式

參考:前綴、中綴、后綴表達式(逆波蘭表達式) - chensongxian - 博客園

中綴表達式就是人們?nèi)粘I钪衅毡槭褂玫乃膭t運算表達式。如(3+4)*5

前綴表達式又稱波蘭表達式,其運算符位于操作數(shù)之前,比如:- × + 3 4 5 6

后綴表達式又稱逆波蘭表達式,其運算符位于操作數(shù)之后,比如:3 4 + 5 × 6 -

前綴表達式的計算機求值:

從右往左掃描表達式,遇到數(shù)字將其壓入棧,遇到運算符,彈出兩個數(shù)字元素并計算,然后將所求的得值壓入棧,繼續(xù)重復操作,直至只剩下一個元素,彈出,即為結果。

例如:- * + 3 4 5 6

1.掃到6,將其壓入,5壓入,4壓入,3壓入。

2.掃到+,彈出3和4,計算3+4求得7,將7壓入。

3.繼續(xù)掃,掃到*,彈出7和5,計算7*5,求得35,壓入35.

4.掃到-,彈出35和6,計算35-6,求得29,得到結果。

中綴轉(zhuǎn)前綴:

1.建立兩個棧,s1,s2,一個存放運算符,一個存放數(shù)字。

2.從右往左掃描中綴表達式,如果是數(shù)字就壓入s2。

3.若是運算符:

如果棧為空或是棧頂元素為‘(’,直接壓入運算符。

如果是‘)’,彈出并壓入s2中,直到‘(’,并且丟棄括號。

如果運算符的優(yōu)先等級大于或相等棧頂元素的優(yōu)先等級,直接壓入s1。

如果小于,則將棧頂元素彈出壓入s2,再將運算符與此時的棧頂元素相比較,若大于或相等則壓入。

4.重復操作,直至到達最左端。

5.將s1的元素依次彈出并壓入s2,依次彈出s2的元素。

后綴表達式的計算機求值:

與前綴表達式相同,只不過是從左往右。

例如計算3 4 + 5 * 6 -:

1.掃到3,壓入,4壓入。

2.掃到+,彈出3和4,計算3+4,得出7壓入。

3.掃到5,壓入。

4.掃到*,彈出5和7,計算5*7,得出35,壓入。

5.掃到6,壓入。

6.掃到-,彈出35和6,計算35-6,得出29,求出結果。

中綴轉(zhuǎn)后綴表達式:

1.建立兩個棧,s1,s2,一個存放運算符,一個存放數(shù)字。

2.從左到右掃描中綴表達式,掃到數(shù)字就壓入s2。

3.掃到運算符:

若棧為空或棧頂元素為‘(’,直接壓入s1。

若為‘)’,彈出并壓入到s2,直到‘)’,丟棄括號。

若運算符優(yōu)先級大于此時的棧頂元素,直接壓入s1。

若小于,將棧頂元素彈出壓入s2,再與新的棧頂元素比較。

4.重復,直到最右邊。

5.依次彈出s2,再逆序輸出,即為所求。

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

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

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