字首轉中綴(表示式)

2022-09-13 07:36:12 字數 453 閱讀 8309

問題描述:

字首轉中綴示例,允許有多餘括號:

* + 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() + ")";  //注意加括號,保證中綴表示式能正確求解

default:

return next_str;

思路2(樹):

1. 從左向右掃瞄

2. 根據操作符,不斷構造子樹

3. 中序遍歷樹,並輸出,即可得到中綴表示式

中綴表示式轉字首表示式

1 求輸入串的逆序。2 檢查輸入的下一元素。3 假如是運算元,把它新增到輸出串中。4 假如是閉括號,將它壓棧。5 假如是運算子,則 i 假如棧空,此運算子入棧。ii 假如棧頂是閉括號,此運算子入棧。iii 假如它的優先順序高於或等於棧頂運算子,此運算子入棧。iv 否則,棧頂運算子出棧並新增到輸出串中...

中綴表示式轉字首表示式

在字首表示式中,運算子直接放在運算元的前面。例如 a b ab。a b c a bc。a c h b d a ch bd。其實就是表示式樹的先序遍歷。字首表示式得到字尾表示式過程 有運算元跟運算子棧。中綴表示式中沒遇到乙個運算元,入運算元棧,運算子棧跟字首得到字尾表示式一樣。假設剛從運算子棧中彈出乙...

字首 中綴 字尾表示式及中綴轉字尾表示式

字首表示式 不含括號的算術表示式,而且是將運算子寫在前面,運算元寫在後面的表示式。求法 首先從右往左掃瞄表示式,從右邊第乙個字元判斷,如果當前字元是數字,則一直到字串的末尾再記錄下來 如果是運算子,則將右邊最近的兩個數字串做相應的運算,以此作為乙個新串並記錄下來。一直掃瞄到最左端停止。例子 a b ...