逆波蘭式
是波蘭邏輯學家盧卡西維奇(lukasiewicz)發明的一種表示
表示式的方法。
這種表示方式把運算子寫在運算物件的後面,例如,把a+b寫成ab+,所以也稱為字尾式。
這種表示法的優點是根據運算物件和算符的出現次序進行計算,不需要使用括號,
也便於用械實現求值。對於
表示式x:=(a+b)*(c+d),其字尾式為xab+cd+*:=。
原表示式:a*(b*(c+d/e)-f)# /* # 為表示式結束符號*/
字尾式:abcde/+*f-*#
為運算子定義優先順序:# ( + - * / **
-1 0 1 1 2 2 3
從原表示式求字尾式的規則為:
1.設定運算子棧
2.假設表示式的結束符為"#",我們需要預設運算子棧底元素為"#"
3.掃瞄表示式,若當前字元是運算元,則直接傳送給字尾表示式;
4.若當前字元為運算子且優先順序大於棧頂運算子,則進棧,否則退出棧頂運算子並將其傳送給字尾式。然後將當前運算子放入棧中。
5.若當前字元是結束符,則將棧中的全部運算子依次傳送給字尾式。
6.若當前字元為"(",進棧。
7.若當前字元為")",則從棧頂起,依次將棧中運算子出棧傳送給ie字尾式,直到碰到"("。將棧中"("出棧,不需要傳送給字尾式。然後繼續掃瞄表示式。
求字尾式 逆波蘭式 的步驟
原表示式 a b c d e f 為表示式結束符號 字尾式 abcde f x 為運算子定義優先順序 1 0 1 1 2 2 3 從原表示式求字尾式的規則為 1.設定運算子棧 2.假設表示式的結束符為 我們需要預設運算子棧底元素為 3.掃瞄表示式,若當前字元是運算元,則直接傳送給字尾表示式 4.若當...
波蘭式和逆波蘭式
字首 中綴 字尾表示式是對表示式的不同記法,其區別在於運算子相對於運算元的位置不同,字首表示式的運算子位於運算元之前.中綴和字尾同理 雖然人的大腦很容易理解與分析中綴表示式,但對計算機來說中綴表示式卻是很複雜的,因此計算表示式的值時,通常需要先將中綴表示式轉換為字首或字尾表示式,然後再進行求值。對計...
中綴式轉換為字尾式(逆波蘭式)方法
對於用低階程式語言是實現對表示式的處理,字尾式 逆波蘭式 最為簡便。下面是將中綴式 常見表示式 轉換為字尾式的演算法 棧底放 從左至右逐字讀取中綴式 a.當當前字元為數字時,直接輸出 b.當當前字元為 時,將其壓棧 c.當當前字元為 時,則彈出堆疊中最上的 之前的所有運算子並輸出,然後刪除堆疊中的 ...