資料結構棧之中綴表示式轉字尾

2021-06-22 14:21:39 字數 870 閱讀 9031

對於乙個中綴表示式,假設a*b+(a+b)

我們對它從左至右進行遍歷,當遇到運算元時直接輸出;

當遇到操作符且棧為空時,將操作符壓入棧;

當遇到左括號時,將其入棧;

當遇到右括號時,將棧中左括號上面的元素依次出棧並輸出,最後將左括號出棧(但不輸出);

當遇到操作符時(此時棧非空),當棧頂元素也為操作符且優先順序大於等於此操作符時,棧頂元素出棧並輸入;然後將次操作符入棧;

最後依次輸出棧中元素(從上到下);

轉換完畢;

此時上面的那個中綴表示式已經轉換為  ab*ab++

#include //中綴表示式轉字尾表示式

#include #include #include #include using namespace std;

int prec(char x,char y) //優先順序比較函式

int main()

if(!s.empty())//彈出左括號

s.pop();

} else if(c=='+'||c=='-'||c=='*'||c=='/') 條件5:如果遇到操作符,將優先順序大於等於此操作符的棧頂元素(緊限操作符,如果是左括號則不做處理)出棧並輸出

s.push(c); //壓入此操作符

} }

while(!s.empty()) //條件6:最後將棧中所以元素依次輸出

return 0;

}

資料結構之中綴表示式轉字尾表示式

中綴表示式轉字尾表示式的基本規則 1.遇到運算元就直接輸出 2.遇到左括號就壓入棧中 3.遇到右括號就將棧中所有符號輸出且彈出 左括號只需要彈出不需要輸出 4.遇到操作符就與棧頂元素進行對比 當前操作符比棧頂操作符的優先順序大的話 就直接將當前操作符壓入棧中 當前操作符比棧頂操作符的優先順序小或者相...

資料結構之中綴表示式轉字尾表示式

對於計算機來說,字尾表示式更方便計算,但是對於我們來說,中綴表示式更方便理解。為了大家都方便,下面就聊聊如何把乙個中綴表示式借助 轉化成乙個字尾表示式。在實現轉字尾表示式時,用棧結構儲存操作符,由於中間結構不用出棧,並且如果用棧結構儲存,那麼將出棧結果逆序才是我們要的字尾表示式,所以用list儲存即...

資料結構之中綴表示式轉字尾表示式

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