中綴表示式轉字尾表示式

2021-09-28 14:49:58 字數 1551 閱讀 3116

我會用大白話解釋。

所謂中綴表示式:1+2-(3*4),即我們日常生活中算數表示式;

字尾表示式是為了計算機能看懂(取消了中綴表示式的括號)。

中綴表示式到字尾表示式是棧的實際應用。

轉為字尾表示式的規則(符號為待入棧字元,棧頂符號為已入棧字元):

1、設定兩個棧,乙個數字棧,乙個符號棧

2、遇到數字就入數字棧。

3、遇到符號時,若棧為空或者該符號是左括號,直接入符號棧;剩下的要比較優先順序。

4、若該符號比棧頂的符號優先順序,則直接入棧;若低或相等,將棧頂的符號入數字棧,通過迴圈,繼續比較新的棧頂符號與該符號的優先順序;

5、特例,若棧頂的符號為左括號,直接入符號棧。

6、若符號為右括號,無需入棧,而是將棧頂的符號依次入數字棧,直到遇到左括號,再將左括號出棧即可。

7、若比較完畢,將符號棧剩下的符號入數字棧

8、列印出逆置的數字棧。

這裡用的是鍊錶

//結點

typedef struct qnodenode;

//封裝棧

typedef struct qstackstack;

//中綴轉字尾表示式 

void

fun(

char e)

elseif(

isempty

(s1)

)else

if( e[i]

=='('

)else

if( e[i]

==')'

)pop

(s1)

;//符號棧的右括號出棧

i++;}

else

else}}

if(!isempty

(s1)

) s2=

reverse

(s2)

;print

(*s2);}

//優先順序判斷 : 1-大於 0-小於等於

intismax

(stack *s,

char e)

elseif(

(s->top->date ==

'+'|| s->top->date ==

'-')

&&(e ==

'*'|| e ==

'/')

)elseif(

(s->top->date ==

'+'|| s->top->date ==

'-')

&&(e ==

'+'|| e ==

'-')

)}

中綴表示式轉字尾表示式

using system using system.collections.generic using system.text namespace 中綴表示式轉字尾表示式 class convert public void run top break case case while top 1 st...

中綴表示式轉字尾表示式

將乙個普通的中綴表示式轉換為字尾表示式的一般演算法是 首先需要分配2個棧,乙個作為臨時儲存運算子的棧s1 含乙個結束符號 乙個作為輸入字尾表示式的棧s2 空棧 s1棧可先放入優先順序最低的運算子 注意,中綴式應以此最低優先順序的運算子結束。可指定其他字元,不一定非 不可。從中綴式的左端開始取字元,逐...

中綴表示式轉字尾表示式

演算法 1.設定乙個運算子棧 初始時可以將棧頂運算子置為 2.按順序掃瞄中綴表示式,當輸入為運算元時就將其輸出到字尾表示式中 3.當輸入為運算子時,則比較輸入運算子和棧頂運算子的優先順序。若輸入運算子的優先順序高於棧頂運算子的優先順序,則將輸入運算子入棧 否則,棧頂運算子的優先順序高於或等於輸入運算...