使用逆波蘭式進行表示式求值

2021-07-04 13:52:32 字數 987 閱讀 2227

中綴表示式及字尾表示式**中說明了使用逆波蘭式進行表示式求值的方法,這裡使用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 ...