字尾表示式

2021-07-16 22:20:12 字數 1452 閱讀 8286

對於乙個算術表示式我們的一般寫法是這樣的

(3 + 4) × 5 - 6

這中寫法是中序表示式

後序表示式則是將運算子放在運算元的後面,如

3 4 + 5 × 6 -

可以看出後序表示式中沒有括號, 只表達了計算的順序, 而這個順序恰好就是計算器中的一般計算順序。

建立乙個棧s 。從左到右讀表示式,如果讀到運算元就將它壓入棧s中,如果讀到n元運算子(即需要引數個數為n的運算子)則取出由棧頂向下的n項按操作符運算,再將運算的結果代替原棧頂的n項,壓入棧s中 。如果字尾表示式未讀完,則重複上面過程,最後輸出棧頂的數值則為結束。

例 : 6 5 2 3 + 8 * + 3 + *

由於後續表示式更易計算機去解決,所以我們在運算算術表示式時要先轉換為後序的。方法如下

建立符號棧

順序掃瞄中序表示式

a) 是數字, 直接輸出

b) 是運算子

i : 「(」 直接入棧

ii : 「)」 將符號棧中的元素依次出棧並輸出, 直到 「(「, 「(「只出棧, 不輸出

iii: 其他符號, 將符號棧中的元素依次出棧並輸出, 直到 遇到比當前符號優先順序更低的符號或者」(「。 將當前符號入棧。

掃瞄完後, 將棧中剩餘符號依次輸出

例 : 3+(2-5)*6/3

表示式 : 3

符號棧 :

表示式 : 3

符號棧 : +

表示式 : 3

符號棧 : + (

表示式 : 3 2

符號棧 : + (

表示式 : 3 2

符號棧 : + ( -

表示式 : 3 2 5

符號棧 : + ( -

表示式 : 3 2 5 -

符號棧 : +

表示式 : 3 2 5 - 6

符號棧 : + *

表示式 : 3 2 5 - 6 *

符號棧 : + /

表示式 : 3 2 5 - 6 * 3

符號棧 : + /

表示式 : 3 2 5 - 6 * 3 / +

字尾表示式 中綴到字尾表示式

輸入空格跳出迴圈 while k getchar n 字尾表示式 此 僅限於0 9內的加減乘除 include include include define long 10 using namespace std typedef struct stack qstack void init qstac...

字尾表示式

字尾表示式的計算和中綴表示式轉字尾表示式 此處的運算用的是鍊錶的表示方法 以下為三個會涉及到的標頭檔案 error.h 字尾表示式 created by kyle.yang on 14 12 2.ifndef error h define error h include using namespac...

字尾表示式

完整的題目不能複述了,概括一下題目就是輸入乙個16進製制字尾表示式 string型 輸出其結果 int型 不需要考慮異常情況 即測試用例一定是正確的表示式 不需要考慮優先順序。因為python用的比較順手,就拿python寫了 def postfixcalc str pstack nummap fo...