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

2021-10-09 02:02:20 字數 884 閱讀 3795

對於計算機來說,字尾表示式更方便計算,但是對於我們來說,中綴表示式更方便理解。為了大家都方便,下面就聊聊如何把乙個中綴表示式借助**轉化成乙個字尾表示式。

在實現轉字尾表示式時,用棧結構儲存操作符,由於中間結構不用出棧,並且如果用棧結構儲存,那麼將出棧結果逆序才是我們要的字尾表示式,所以用list儲存即可,下面先來說說轉化過程的思路:

若當前元素是數字,直接入list;

若當前元素是左括號(,直接入stack;

若當前元素是右括號),將stack中的元素出棧,併入list中,直到遇到左括號停止,並將左括號出棧(這裡捨棄一對括號);

此時,當前元素是操作符,如果當前操作符的優先順序小於或者等於棧頂操作符優先順序,出棧並將出棧的操作符入list,再將當前操作符入棧;否則直接入棧。

**:

//把中綴表示式轉化成對應的字尾表示式

public class infixtosuffix

//把中綴表示式字串轉成對應的list

public static listinfixtolist(string str)else

list.add(s);

}}while (itosuffix(listlist)else if (item.equals("("))else if (item.equals(")"))

//去掉stack中的(

stack.pop();

}else

//stack.push(item);}}

//遍歷完list,還需將stack中剩餘元素加入ls中

while (stack.size()!= 0)

return ls;

}}class operation

return res;

}}

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

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

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

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

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

對於乙個中綴表示式,假設a b a b 我們對它從左至右進行遍歷,當遇到運算元時直接輸出 當遇到操作符且棧為空時,將操作符壓入棧 當遇到左括號時,將其入棧 當遇到右括號時,將棧中左括號上面的元素依次出棧並輸出,最後將左括號出棧 但不輸出 當遇到操作符時 此時棧非空 當棧頂元素也為操作符且優先順序大於...