python中綴轉字尾求值 將中綴轉換為字尾並求值

2021-10-11 20:13:54 字數 1514 閱讀 8032

一.中綴轉字尾

中綴轉字尾口訣:

1.遇到運算元,直接輸出。

2.當棧為空時,遇到操作符直接入棧。

3.遇到左括號,將其入棧

4.遇到右括號,執行出棧,輸出出棧的元素,直到彈出左括號,(左右括號不輸出)。

5.遇到運算子時,依次彈出所有優先順序大於或等於該運算子的棧頂元素(到輸出)然後將該元素入棧,否則直接入棧。

6.最終棧頂元素依次輸出。

中綴表示式「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/+

二,計算字尾表示式

計算字尾表示式口訣:

1.遇到運算元直接入棧。

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出棧,棧變為空。

中綴轉字尾及字尾求值

中綴表示式轉字尾表示式 include include include include include include includeusing namespace std const int maxn 1000 10 typedef char typename struct node typede...

c 實現中綴轉字首,中綴轉字尾,字尾表示式求值

思想 用兩個棧實現,規則如下 1 初始化兩個棧 運算子棧s1和儲存中間結果的棧s2 2 從右至左掃瞄中綴表示式 3 遇到運算元時,將其壓入s2 4 遇到運算子時,比較其與s1棧頂運算子的優先順序 4 1 如果s1為空,或棧頂運算子為右括號 則直接將此運算子入棧 4 2 否則,若優先順序比棧頂運算子的...

中綴轉字尾

include using namespace std define max 30 struct stack void initstack stack s char pop stack s void push stack s,char c char top stack s int copare ch...