軟考 解密字尾表示式

2021-07-24 05:21:20 字數 1096 閱讀 9713

我們接觸這個字尾表示式也叫逆波蘭表示式,其求值過程可以用到

棧來輔助儲存。首先棧是先進後出,計算時總是從棧的最上乙個開始

出棧。我們能明白中綴表示式-平常進行基本運算的。

具體這樣理解:將中綴表示式轉換成等價的字尾表示式後,求值

時,不需要再考慮運算子的優先順序,只需從

左到右掃瞄

一遍字尾表達

式即可。

具體求值步驟為:從左到右掃瞄字尾表 達式,遇到運算子就

把表示式中該運算子前面兩個運算元取出並運算,然後把結果帶回後

綴表示式;繼續掃瞄直到字尾表示式最後乙個表示式。

演算法規則:

1、建立乙個棧s

2、從左到右讀表示式,如果讀到運算元就將它壓入棧中,如果讀到運

算符(一般是二元操作符,例如+、-、*、/)則取出由棧頂向下的前

2

個元素,按操作符規則運算

3、再將運算的結果代替原棧頂取出來的2個元素,壓入棧s中 。如果

字尾表示式未讀完,則重複上面過程,最後輸出棧頂的數值則為結

束。  

假定待求值的字尾表示式為:6  5  2  3  + 8 * + 3  +  *,則其求值過程如下:

(1)遍歷表示式,遇到的數字首先放入棧中,依次讀入6 5 2 3 此時

棧如下所示:

(2)接著讀到「+」,則從棧中彈出3和2,執行3+2,計算結果等於

5,並將5壓入到棧中。

(3)然後讀到8(數字入棧),將其直接放入棧中。

(4)讀到「*」,彈出8和5,執行8*5,並將結果40壓入棧中。

而後過程類似,讀到「+」,將40和5彈出,將40+5的結果45壓入棧...

以此類推。最後求的值288。

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

輸入空格跳出迴圈 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...

字尾表示式

對於乙個算術表示式我們的一般寫法是這樣的 3 4 5 6 這中寫法是中序表示式 而後序表示式則是將運算子放在運算元的後面,如 3 4 5 6 可以看出後序表示式中沒有括號,只表達了計算的順序,而這個順序恰好就是計算器中的一般計算順序。建立乙個棧s 從左到右讀表示式,如果讀到運算元就將它壓入棧s中,如...