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

2021-08-20 03:15:18 字數 1275 閱讀 2398

字首表示式:

不含括號的算術表示式,而且是將運算子寫在前面,運算元寫在後面的表示式。

求法:首先從右往左掃瞄表示式,從右邊第乙個字元判斷,如果當前字元是數字,則一直到字串的末尾再記錄下來;如果是運算子,則將右邊最近的兩個數字串做相應的運算,以此作為乙個新串並記錄下來。一直掃瞄到最左端停止。

例子:(a + b)* (c + d) :  *+ab+cd。理解:根據優先順序,把數字位置不同,有那兩個可以做運算,將運算子寫在對應的數字前面,做完數字之後還有的元素,放在最前面。

中綴表示式:

是乙個通用的算術或邏輯公式表達方法,操作符是以中綴形式處於運算元中間,即我們常用的算術表達方式。

注意:中綴記法中括號是必須的。計算過程中用括號將相應的運算元和運算子括起來,用於指示運算的次序。

字尾表示式:

不包含括號,運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行(不再考慮運算子的優先規則)。

例子:(2 + 3)* 4 : 23+4*。理解:和字首區別不大,是從左往右,保證數字字元的順序位置不變即可。

分析過程:

#include#include#include#include//用於型別判斷 

using namespace std;

stackop; // 操作符棧

char ans[1000];

int priority(char ch)

}bool isoperator(char ch)

return false;

}bool ischaracter(char ch)

return false;

}int main()

else if(isoperator(str[i]))

else

op.push(str[i]);}}

else if(str[i] == '(')

else if(str[i] == ')')

op.pop();

}else if(str[i] == '#')

}} cout << ans << endl;

} return 0;

}

測試截圖:

以上就是這篇的內容,歡迎指出錯誤和不足之處,謝謝!

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

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

字首 中綴 字尾表示式

它們都是對表示式的記法,因此也被稱為字首記法 中綴記法和字尾記法。它們之間的區別在於運算子相對與運算元的位置不同 字首表示式的運算子位於與其相關的運算元之前 中綴和字尾同理。舉例 3 4 5 6 就是中綴表示式 3 4 5 6 字首表示式 3 4 5 6 字尾表示式 中綴表示式 中綴記法 中綴表示式...

字首 中綴 字尾表示式

最近筆試的過程中老是有中綴轉換為字首,或是中綴轉換為字尾的問題,資料結構學了這麼久真的是記不清了,今天重新複習了一下,藉此機會總結一下 中綴 我們正常理解的表示式的書寫方式 字首 操作符全部位於運算元的前面,運算元的順序為從右到左依次壓棧的順序,操作符為從左到右依次壓棧的順序 字尾 不包含括號,運算...