字尾表示式計算和逆波蘭式

2021-09-24 18:38:30 字數 2135 閱讀 4588

中綴表示式「9+(3-1)*3+10/2」轉化為字尾表示式「9 3 1-3*+ 10 2/+」

規則:從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,即成為字尾表示式的一部分;若是符號,則判斷其與棧頂符號的優先順序,是右括號或優先順序低於找頂符號(乘除優先加減)則棧頂元素依次出找並輸出,並將當前符號進棧,一直到最終輸出字尾表示式為止。

下面我們來具體看看這個過程。

1. 初始化一空棧,用來對符號進出棧使用。

2. 第乙個字元是數字9,輸出9,後面是符號「+」,進棧。

3. 第三個字元是「(」,依然是符號,因其只是左括號,還未配對,故進棧。

4. 第四個字元是數字3,輸出,總表示式為9 3,接著是「-」進棧。

5. 接下來是數字1,輸出,總表示式為9 3 1,後面是符號「)」,此時,我們需要去匹配此前的「(」,所以棧頂依次出棧,並輸出,直到「(」出棧為止。此時左括號上方只有「-」,因此輸出「-」,總的輸出表示式為9 3 1 -

6. 接著將符號「*」,因為此時的棧頂符號為「+」號,優先順序低於「*」,因此不輸出。將「*」壓棧;然後是數字3,輸出,總的表示式為9 3 1 - 3 。

7. 之後是符號「+」,此時當前棧頂元素比這個「+」的優先順序高,因此棧中元素出棧並輸出(沒有比「+」號更低的優先順序,所以全部出棧),總輸出表示式為 9 3 1 - 3 * +.然後將當前這個符號「+」進棧。也就是說,前6張圖的棧底的「+」是指中綴表示式中開頭的9後面那個「+」,而下圖中的棧底(也是棧頂)的「+」是指「9+(3-1)*3+」中的最後乙個「+」。

8. 緊接著數字10,輸出,總表示式變為9 3 1-3 * + 10。

9. 最後乙個數字2,輸出,總的表示式為 9 3 1-3*+ 10 2

10. 因已經到最後,所以將棧中符號全部出棧並輸出。最終輸出的字尾表示式結果為 9 3 1-3*+ 10 2/+

計算機運算的步驟是:

將中綴表示式轉化為字尾表示式(棧用來進出運算的符號)。

將字尾表示式進行運算得出結果(棧用來進出運算的數字)。

字尾表示式:9 3 1-3*+ 10 2/+

詳細步驟:

1. 初始化乙個空棧。此桟用來對要運算的數字進出使用。

2. 字尾表示式中前三個都是數字,所以9、3、1進棧。

3. 接下來是減號「-」,所以將棧中的1出棧作為減數,3出棧作為被減數,並運算3-1得到2,再將2進棧。

4. 接著是數字3進棧。

5. 後面是乘法「*」,也就意味著棧中3和2出棧,2與3相乘,得到6,並將6進棧。

6. 下面是加法「+」,所以找中6和9出找,9與6相加,得到15,將15進棧。

7. 接著是10與2兩數字進棧。

8. 接下來是符號因此,棧頂的2與10出棧,10與2相除,得到5,將5進棧。

9. 最後乙個是符號「+」,所以15與5出找並相加,得到20,將20進棧。

10. 結果是20出棧,棧變為空。

字尾表示式(逆波蘭表示式)的計算

字首表示式 3 4 5 6對應的字首表示式就是 3456 從左至右掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它們做相應的計算,並將結果入棧 重複上述過程直到表示式式最左端,最後運算得出的值即為表示式的結果 例如 3 4 5 6對應的字首表示式就是 3456,針...

字首 波蘭式 中綴 字尾表示式 逆波蘭式

中綴表示式 中綴表示式就是常見的運算表示式,如 3 4 5 6 字尾表示式 字尾表示式又稱逆波蘭表示式,與字首表示式相似,只是運算子位於運算元之後 比如 3 4 5 6 與字首表示式類似,只是順序是從左至右 從左至右掃瞄表示式,遇到數字時,將數字壓入堆疊,遇到運算子時,彈出棧頂的兩個數,用運算子對它...

逆波蘭表示式 字尾表示式

字首表示式又稱波蘭式,字首表示式的運算子位於運算元之前。比如 3 4 5 6中綴表示式就是常見的運算表示式,如 3 4 5 6字尾表示式又稱逆波蘭表示式,與字首表示式相似,只是運算子位於運算元之後,比如 3 4 5 6 人類最熟悉的一種表示式1 2,1 2 3,3 42 4等都是中綴表示法。對於人們...