數據結構筆記——棧的應用(表達式求值)

目錄

一、熟悉的算數表達式

二、波蘭數學家的靈感

三、中綴、後綴、前綴表達式

中綴轉後綴的手算方法:

後綴表達式的計算(手算):

後綴表達式的計算(機算):

中綴轉前綴的手算方法:

前綴表達式的計算(機算):

四、總結


 

一、熟悉的算數表達式

由三個部分組成:操作數運算符界限符

界限符是必不可少的,反映了計算的先後順序

 

二、波蘭數學家的靈感

可以不用界限符也能無歧義地表達運算順序

逆波蘭表達式=後綴表達式、波蘭表達式=前綴表達式

 

三、中綴、後綴、前綴表達式

中綴表達式:運算符在兩個操作數中間。a + b、a + b - c、a + b - c * d

後綴表達式:運算符在兩個操作數後面。a b +、a b + c -、a b + c d * -

前綴表達式:運算符在兩個操作數前面。+a b 、- + a b c、- + a b  * c d

 

中綴轉後綴的手算方法:

①確定中綴表達式中各個運算符的運算順序

②選擇下一個運算符,按照[左操作數 右操作數 運算符]的方式組合成一個新的操作數

③如果還有運算符沒被處理,就繼續②

 

左優先原則,不要FreeStyle,保證手算和計算結果相同

“左優先”原則:只要左邊的運算符能先計算,就優先算左邊的,保證運算順序唯一

後綴表達式的計算(手算):

從左往右掃描,每遇到一個運算符,就讓運算符前面最近的兩個操作數執行對應運算,合體爲一個操作數

注:兩個操作數的左右順序

 

後綴表達式的計算(機算):

用找實現後綴表達式的計算

①從左往右掃描下一個元素,直到處理完所有元素

②若掃描到操作數則壓入棧,並回到①,否則執行③

③若掃描到運算符,則彈出兩個棧頂元素,執行相應運算,運算結果壓回棧頂,回到①

注:先出棧的是“右操作數”,若表達式合法,則最後棧中只會留下一個元素,就是最終結果

 

中綴轉前綴的手算方法:

①確定中綴表達式中各個運算符的運算順序

②選擇下一個運算符,按照【運算符 左操作數 右操作數】的方式組合成一個新的操作數

③如果還有運算符沒被處理,就繼續②

“右優先”原則:只要右邊的運算符能先計算,就優先算右邊的

 

前綴表達式的計算(機算):

用棧實現前綴表達式的計算:

①從右往左掃描下一個元素,直到處理完所有元素

②若掃描到操作數則壓入棧,並回到①;否則執行③

③若掃描到運算符,則彈出兩個棧頂元素,執行相應運算,運算結果壓回棧頂,回到①

注:先出棧的是“左操作數”

 

四、總結

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章