中綴轉字首 c語言

2021-07-10 07:39:52 字數 1009 閱讀 9047

今天寫字尾表示式轉中綴表示式卡了好久,最後去上網問了才會,思路很清晰但是**的組織能力欠缺。看來我也是那種偽**寫的對,**通不過的選手。

寫個普通的中綴轉字首吧,演算法都是死的,就那麼幾步,我還除錯了半天,不過對優先順序的理解倒是透徹了(isp 和 icp)

利用棧將中綴表示式轉成字首表示式的思路:

1)求輸入串的逆序。

2)檢查輸入的下一元素。

3)假如是運算元,把它新增到輸出串中。

4)假如是閉括號,將它壓棧。

5)假如是運算子,則

i)假如棧空,此運算子入棧。

ii)假如棧頂是閉括號,此運算子入棧。

iii)假如它的優先順序高於或等於棧頂運算子,此運算子入棧。

iv)否則,棧頂運算子出棧並新增到輸出串中,重複步驟5。

6)假如是開括號,棧中運算子逐個出棧並輸出,直到遇到閉括號。閉括號出棧並丟棄。

7)假如輸入還未完畢,跳轉到步驟2。

8)假如輸入完畢,棧中剩餘的所有操作符出棧並加到輸出串中。

9)求輸出串的逆序。

#include#include#includeusing namespace std;

// in_stack precedence

int isp(char op)

}// incoming precedence

int icp(char op)

}//回到正題,中綴轉字首

void itwof(string e)

else if (!e.empty() && e[i] == ')')

else if (!e.empty() && e[i] == '(')

stack.pop_back();

} else

else

}} }

while (!stack.empty())

while (!result.empty())

cout << endl;

}int main(void)

中綴轉字尾和字首

中綴轉字尾 include using namespace std bool isoperator char ch intgetpriority char ch return level string postorder void trans string inorder s.pop else el...

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

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

字首轉中綴(表示式)

問題描述 字首轉中綴示例,允許有多餘括號 4 2 3 6 4 2 3 6 3 4 2 5 3 4 2 5 3 4 2 5 3 4 2 5 思路1 遞迴 1.從左向右掃瞄 2.遇到操作符,則遞迴求解,返回新字串,遇到數字,則直接返回數字串,例如 case return exp exp 注意加括號,保證...