對於乙個中綴表示式,假設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棧頂的運算子彈出...