棧與表達式求值

1.任務:

輸入語法正確的表達式,求值

操作數:123456789    double      操作符:+  -  *  /    (    )       char     

2.核心思想:  

(1).應用棧,鏈棧。一個棧存儲操作數,一個棧存儲操作符。

(2).把輸入的表達式存儲在字符數組中,再掃描數組。

a.如果是操作數,入操作數棧;

b.如果是操作符,若棧頂操作符爲空則將當前操作符直接入棧;否則比較掃描的當前操作符和棧頂操作符 ;

棧頂操作符一定比當前操作符先出現

比較規則:

同級運算從左到右;

先乘除,後加減

先括號內再括號外

得到一個棧頂操作符與當前操作符優先級的表:

'<'棧頂優先級較低
 '='左右括號相遇
 '>'棧頂優先級高

c.若棧頂優先級低則將當前操作符直接入棧;

 

若左右括號相遇(棧頂是左括號,當前是右括號)則將棧頂括號出棧,當前括號不作處理;

 

若棧頂優先級高,則彈出棧頂操作符,第一次彈出棧頂數b作爲第二個     (算式 的操作數),

第二次彈出棧頂數a作爲第一個     (算式 的操作數),例a+b

計算完成後將結果入操作數棧,掃描指針減一使得當前操作符和棧頂操作符再比較一次,因爲棧頂操作符已經變化了。

(3)掃描完成後,再

彈出棧頂操作符,第一次彈出棧頂數b作爲第二個(算式 的操作數),

第二次彈出棧頂數a作爲第一個(算式 的操作數),計算一次,因爲操作符棧可能有剩一個操作符沒處理。

(4)最後操作數棧的那個元素就是表達式計算結果

3.學習收穫

(1)有關鏈棧的初始化,入棧,出棧,判空,獲取棧頂元素的操作熟悉

(2)c++的值傳遞與引用傳遞的區別

(3)vs2019操作界面的熟悉

 

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