字尾表示式

2021-08-10 08:27:49 字數 830 閱讀 9858

字尾表示式,指的是不包含括號,

運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則)。這樣方便了計算機的工作。

而我們平時書寫的數學表示式屬於中序表示式,我們需要將中序表示式寫成後續表示式交給計算機處理,計算機只需要依次讀取後續表示式按照自己的規則進行壓棧彈棧操作就可以得出結果,以提高計算機的工作效率。

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

舉個例子:6 5 2 3 + 8 * + 3 + *(我們寫好的字尾表示式)

計算機現將數字 6 5 2 3 依次入棧當讀到+操作符時,2 3 彈棧進行+操作,將得到的5入棧再將8入棧:6 5 5 8

這時讀到*操作符5 8 彈棧進行*操作,將得到的40壓棧:6 5 40

40和5彈棧進行+操作得到45壓棧,數字3壓棧:6 45 3

45 3彈棧進行+操作:6 48

彈棧進行*操作,得到288即為棧頂元素

這裡對中序表示式轉字尾表示式的寫法寫乙個小技巧:首先將所有的數字依次寫出,按照我們對中序表示式計算的先後邏輯順序,將操作符寫在運算元的後面:這裡舉個例子:

a*(b+c)-d: 首先寫出a b c d,我們會先計算b+c所以將+寫在bc的後面,即a b c+ d

然後是a和(b+c)的結果相乘也就是a b c + *

最後是將結果和d相減a b c + * d -

可以自己在網上找幾個例子做下練習。

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

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