資料結構之用棧實現逆波蘭表示式

2021-07-12 03:14:21 字數 1232 閱讀 5102

逆波蘭表示式也稱為字尾表示式,它將乙個算數表示式不包含括號,

運算子放在兩個運算物件的後面,所有的計算按運算子出現的順序,嚴格從左向右進行,如下圖所示:

在這裡我們可以運用棧的特點來實現字尾表示式,思路如下:

1.首先當遇到運算運算元時將其進行push操作;

2.當遇到操作符是將此時的棧pop兩次,先取出的棧頂為右運算元;

3.執行此方法到整個陣列遍歷完。

我們在這裡採用了陣列來儲存字尾表示式中的元素,因為如果用字串儲存的話,首先解析字串的時候會比較麻煩(既有數字還有字元),其次陣列的大小控制也比較方便。

利用列舉的方法將所要用到的運算子和運算元羅列出來

enum type 

;

這樣方便我們後面的操作,可以在自由增減我們需要的運算方法。

#include#include#includeusing namespace std;

enum type 

;struct cell

;int countrpn(cell _a, size_t _size)

//如果是操作符則先將當前棧頂元素取出

//再取出另乙個運算元做運算

//注意:先取出的數為右運算元(在減法和除法中要區分開來)

if (_a[i]._type == operator)

}} return s.top();

}int main()

, ,

, ,

, ,

, ,

, ,

};int ret = countrpn(rpnarray, sizeof(rpnarray) / sizeof(rpnarray[0]));

cout <

system("pause");

return 0;

}

執行結果如下:

寫在結尾:

本次程式設計需要注意理解逆波蘭表示式的意義,在儲存元素時候注意選擇用陣列而不是字串。

資料結構 棧應用之逆波蘭表示式(字尾表示式)

逆波蘭表示式含義我就不做贅述了,摘自百科上的一段話 逆波蘭表示式又叫做字尾表示式。在通常的表示式中,二元運算子總是置於與之相關的兩個運算物件之間,這種表示法也稱為中綴表示。波蘭邏輯學家j.lukasiewicz於1929年提出了另一種表示表示式的方法,按此方法,每一運算子都置於其運算物件之後,故稱為...

波蘭表示式和逆波蘭表示式(棧)

中綴表示式如1 2 2 1 其運算子一般出現在運算元之間,因此稱為中綴表示式,也就是大家程式設計中寫的表達 式。編譯系統不考慮表示式的優先級別,只是對表示式從左到右進行掃瞄,當遇到運算子時,就把其前面的兩 個運算元取出,進行操作。為達到上述目的,就要將中綴表示式進行改寫,變為字尾表示式 如上面的表示...

資料結構6 使用棧計算逆波蘭表示式

1 對於乙個逆波蘭表示式,需要判斷出哪些是數字 整型 浮點型 同時判斷出操作運算子,如何入棧呀?搜的方法,沒有說什麼來區分數字還是操作符 所以我想問題就是個渣渣!將所有的輸入都作為字元輸入!通過兩個迴圈判斷,外迴圈來判斷整個字串的結束 內迴圈利用空格來判斷結束 2 比較有意義的一點就是 比如,我原本...