將中綴表示式(即標準形式的表示式)轉換為字尾式。

2021-09-06 13:17:41 字數 1717 閱讀 8576

目的:將中綴表示式(即標準形式的表示式)轉換為字尾式。

例子:a+b*c+(d*e+f)*g轉換成abc*+de*f+g*+

轉換原則:

1.當讀到乙個運算元時,立即將它放到輸出中。操作符則不立即輸出,放入棧中。遇到左圓括號也推入棧中。

2.如果遇到乙個右括號,那麼就將棧元素彈出,將符號寫出直到遇到乙個對應的左括號。但是這個左括號只被彈出,並不輸出。

3.在讀到操作符時,如果此時棧頂操作符優先性大於或等於此操作符,彈出棧頂操作符直到發現優先順序更低的元素位置。除了處理)的時候,否則決不從棧中移走"("。操作符中,+-優先順序最低,()優先順序最高。

4.如果讀到輸入的末尾,將棧元素彈出直到該棧變成空棧,將符號寫到輸出中。

解如下:

首先,讀入a,並送到輸出,然後+被讀入並壓入棧中。接下來b讀入並送到輸出,此時狀態如下:

stack:                                        輸出:a b

+back  top

接下來讀入*,由於優先性比棧頂元素+大(原則3),因此被壓入棧頂,接著讀入c,並送到輸出:

stack:                                      輸出:a b c

+ *back top

然後讀入+,由於此時棧頂元素為*,優先順序比+大,因此將*彈出,彈出後原來的+變成棧頂元素,由於+的優先性和當前讀入的+優先性相等,因此也被彈出(原則3),最後將讀入的+壓入棧中。因此此時狀態如下:

stack:                                       輸出:a b c * +

+back  top

下乙個讀入的符號是(,由於具有最高優先順序,因此將其放入棧中,然後讀入d:

stack:                                       輸出:a b c * + d

+ (back     top

繼續讀入,此時讀入*,除非處理),否則(決不彈出(原則3),因此*被壓入棧中,接下來讀入e,並送到輸出:

stack:                                      輸出:a b c * + d e

+ ( *

back        top

再往後讀入的符號是+,將*彈出並輸出。(原則3,與之前步驟相似),然後將+壓入棧中,接著讀入f並送到輸出:

stack:                               輸出:a b c * + d e * f

+ ( +

back       top

現在讀入),因此彈出棧元素直到遇到「(」(原則2):

stack:                                輸出: a b c * + d e * f +

+back  top

下面又讀入乙個*,被壓入棧中,然後讀入g並輸出:

stack:                                    輸出: a b c * + d e * f + g

+ *back   top

現在輸入為空,彈出棧中所有元素:

stack :                                    輸出: a b c * + d e * f + g * +

empty                                

自此全部完成。(總結自資料結構與演算法導論c++版第三版)

算術表示式 將中綴表示式轉換為字尾表示式

是什麼?由數字和運算子組成的式子。簡單清楚的描述計算過程和內容。算術表示式分為 字首表示式 中綴表示式 字尾表示式 中綴表示式符合人類的日常思維習慣。採用樹的資料結構,缺點是如果表示式過於複雜,樹的高度會很高,極大的增加了時間複雜度和空間複雜度,但是轉換成線性結構,效率將會提高很多,所以需要將中綴表...

中綴表示式 字尾表示式

中綴表示式就是 a b 這樣的,運算子在兩個數的中間 字尾表示式就是 a b 這樣的,運算子在兩個數後面 再細分一下 中綴表示式 字尾表示式 a b c a b c a b c a b c a b c a b c a b c a b c a b c d e a c a b c d e a c emm...

中綴表示式 字尾表示式

數學表示式稱為中綴表示式,符合人的思考習慣 1 2 3運算子放在數字後面,符合計算機運算 123 遍歷中綴表示式中的數字和符號 左括號 入棧 運算符號 需要與棧頂符號進行優先順序比較 遍歷結束 將棧中所有符號彈出並輸出。例 中綴表示式 1 2 5 3 4 2 1 1 數字1直接輸出 結果 1 棧 空...