波蘭表示式與逆波蘭表示式

2021-08-29 07:24:09 字數 2238 閱讀 3592

2023年09月03日 11:29:15 jitwxs 閱讀數:70 標籤: 波蘭

字首 更多

個人分類: 演算法與資料結構

常見的算術表示式,稱為中綴表示式,例如:

5 + ( 6 – 4 / 2 ) * 3
波蘭表示式也稱為字首表示式,以上面的例子為例,其波蘭表示式為:

+ 5 * - 6 / 4 2 3
中綴表示式轉換字首表示式的操作過程為:

(1)首先設定乙個操作符棧,從右到左順序掃瞄整個中綴表示式:

(2)當掃瞄完畢整個中綴表示式後,檢測操作符棧是否為空,如果不為空,則依次將棧中操作符彈棧,歸入字首表示式。

(3)最後,將字首表示式翻轉,得到中綴表示式對應的字首表示式。

逆波蘭表示式也稱為字尾表示式,以上面的例子為例,其逆波蘭表示式為:

5 6 4 2 / - 3 * +
中綴表示式轉換字尾表示式的操作過程為:

(1)自右向左順序掃瞄整個中綴表示式;

(2)當掃瞄完畢整個中綴表示式後,檢測操作符棧是否為空,如果不為空,則依次將棧中操作符彈棧,歸入字尾表示式。

類別中綴轉字首中綴轉字尾

操作符棧

操作符棧

掃瞄順序從右到左從左到右

遇到運算元直接歸入

直接歸入

遇到右括號直接入棧

將棧中操作符依次彈棧,歸入,直至遇到左括號,將左括號彈棧,處理完畢

遇到左括號將棧中操作符依次彈棧,歸入,直至遇到右括號,將右括號彈棧,處理完畢

直接入棧

遇到其他操作符檢測棧頂操作符優先順序與當前操作符優先順序關係,如果棧頂大於當前,則出棧,歸入,直至棧頂小於等於當前,並將當前操作符入棧

檢測棧頂與當前優先順序關係,如果棧頂大於等於當前則出棧,歸入,直至棧頂小於當前,並將當前操作符入棧

操作符棧中的優先順序從棧底到棧頂操作優先順序:非遞減。即:棧頂可以大於或等於下面的從棧底到棧頂優先順序:遞增。即:棧頂必須大於下面的

是否翻轉翻轉

無需翻轉

對字首表示式從後向前掃瞄,設定乙個運算元棧,如果是運算元,則將其直接入棧。

如果是操作符,則從棧中彈出操作符對應的運算元進行運算,並將計算結果壓棧。

直至從右到左掃瞄完畢整個字首表示式,這時運算元棧中應該只有乙個元素,該元素的值則為字首表示式的計算結果。

從左到右順序掃瞄整個字尾表示式;

如果是運算元,則將該運算元壓入到棧中;

如果是操作符,則從棧中彈出對應的運算元,注意運算元的順序;根據操作符進行運算,並將結果重新壓入到棧中;

直至將整個棧掃瞄完畢;

如果字尾表示式是合法的,則掃瞄完畢後,棧中只有乙個元素,該元素的值即為字尾表示式的結果。

類別字首表示式計算字尾表示式計算

掃瞄順序從右到左從左到右

運算元棧

運算元棧

遇到運算元時壓棧

壓棧遇到操作符時出棧

出棧出棧的順序先彈出運算元a,後彈出b

先彈出運算元b,後彈出a

結果運算元棧中唯一元素的值

波蘭表示式 逆波蘭表示式

中綴表示式是最常見的運算表示式,如 3 5 2 6 1 波蘭表示式又稱為字首表示式,它是由中綴表示式經過一定的方式轉換來的 比如中綴表示式為 3 5x 2 6 1 對應的字首表示式為 3 x 5 2 6 1 對於中綴表示式從右向左遍歷轉換為字首表示式,中途要是用棧進行儲存 轉換規則如下 波蘭表示式 ...

波蘭逆波蘭表示式

實現乙個基本的計算器來計算簡單的表示式字串。表示式字串只包含非負整數,算符 左括號 和右括號 整數除法需要 向下截斷 你可以假定給定的表示式總是有效的。所有的中間結果的範圍為 231,231 1 class solution s2.push s.substr l,r l l r 碰見符號 else ...

波蘭表示式和逆波蘭表示式

題目 根據逆波蘭表示法,求表示式的值。有效的運算子包括 每個運算物件可以是整數,也可以是另乙個逆波蘭表示式。說明 示例 1 輸入 2 1 3 輸出 9 解釋 該算式轉化為常見的中綴算術表示式為 2 1 3 9 示例 2 輸入 4 13 5 輸出 6 解釋 該算式轉化為常見的中綴算術表示式為 4 13...