1.任務:
輸入語法正確的表達式,求值
操作數:123456789 double 操作符:+ - * / ( ) char
2.核心思想:
(1).應用棧,鏈棧。一個棧存儲操作數,一個棧存儲操作符。
(2).把輸入的表達式存儲在字符數組中,再掃描數組。
a.如果是操作數,入操作數棧;
b.如果是操作符,若棧頂操作符爲空則將當前操作符直接入棧;否則比較掃描的當前操作符和棧頂操作符 ;
棧頂操作符一定比當前操作符先出現
比較規則:
同級運算從左到右;
先乘除,後加減
先括號內再括號外
得到一個棧頂操作符與當前操作符優先級的表:
'<'棧頂優先級較低
'='左右括號相遇
'>'棧頂優先級高
c.若棧頂優先級低則將當前操作符直接入棧;
若左右括號相遇(棧頂是左括號,當前是右括號)則將棧頂括號出棧,當前括號不作處理;
若棧頂優先級高,則彈出棧頂操作符,第一次彈出棧頂數b作爲第二個 (算式 的操作數),
第二次彈出棧頂數a作爲第一個 (算式 的操作數),例a+b
計算完成後將結果入操作數棧,掃描指針減一使得當前操作符和棧頂操作符再比較一次,因爲棧頂操作符已經變化了。
(3)掃描完成後,再
彈出棧頂操作符,第一次彈出棧頂數b作爲第二個(算式 的操作數),
第二次彈出棧頂數a作爲第一個(算式 的操作數),計算一次,因爲操作符棧可能有剩一個操作符沒處理。
(4)最後操作數棧的那個元素就是表達式計算結果
3.學習收穫
(1)有關鏈棧的初始化,入棧,出棧,判空,獲取棧頂元素的操作熟悉
(2)c++的值傳遞與引用傳遞的區別
(3)vs2019操作界面的熟悉