中綴表示式及字尾表示式**中說明了使用逆波蘭式進行表示式求值的方法,這裡使用c++進行實現。實現和原理講解有一點不同,需要進一步進行細化。
關於將中綴表示式轉換成後字尾表示式的規則:
規則:從左到右遍歷中綴表示式的每個數字和符號,若是數字就輸出,即成為字尾表示式的一部分;若是符號,則判斷其與棧頂符號的優先順序,是右括號或優先順序低於找頂符號(乘除優先加減)則棧頂元素依次出找並輸出,並將當前符號進棧,一直到最終輸出字尾表示式為止。
上面的規則轉換成下面的執行規則:
1.遇到運算元:直接輸出(新增到字尾表示式中)
2.棧為空時,遇到運算子,直接入棧
3.遇到左括號:將其入棧
4.遇到右括號:執行出棧操作,並將出棧的元素輸出,直到彈出棧的是左括號,左括號不輸出。
5.遇到其他運算子:加減乘除:彈出所有優先順序大於或者等於該運算子的棧頂元素,然後將該運算子入棧
6.最終將棧中的元素依次出棧,輸出。
需要在流程中對上面6種情況下進行判斷並作相應的處理,並且由於數字可能有多位,所以對運算元的取值也是乙個問題。
//比較lhs的優先順序是否不高於rhs,rhs表示棧頂的符號
bool priority(char lhs,char rhs)
//將中綴表示式轉換成字尾式
string inprefix2postprefix(string str)
return res;
}int calculatebypostprefix(string input)
{ stacks;
int tmp=0;
for (int i=0;i
主函式如下:
逆波蘭式與表示式求值
波蘭式 逆波蘭式是資料結構和編譯原理裡面提到的知識點,我們平時的表示式都是這樣的2 3 5 1 10 中綴表示式 這樣表示式易於閱讀和計算,但是對於計算機這樣就有點懵逼了。字首表示式 比如2 3 5 1 這個表示式的字首表示式為 2 3 5 1來表示 波蘭表示式 中綴序表示式 比如 2 3 5 1 ...
逆波蘭式與表示式求值
波蘭式 逆波蘭式是資料結構和編譯原理裡面提到的知識點,我們平時的表示式都是這樣的2 3 5 1 10 中綴表示式 這樣表示式易於閱讀和計算,但是對於計算機這樣就有點懵逼了。字首表示式 比如2 3 5 1 這個表示式的字首表示式為 2 3 5 1來表示 波蘭表示式 中綴序表示式 比如 2 3 5 1 ...
逆波蘭式與表示式求值
波蘭式 逆波蘭式是資料結構和編譯原理裡面提到的知識點,我們平時的表示式都是這樣的2 3 5 1 10 中綴表示式 這樣表示式易於閱讀和計算,但是對於計算機這樣就有點懵逼了。字首表示式 比如2 3 5 1 這個表示式的字首表示式為 2 3 5 1來表示 波蘭表示式 中綴序表示式 比如 2 3 5 1 ...