演算法筆記 Codeup習題 第七章之資料結構

2021-09-25 17:24:06 字數 1329 閱讀 7243

思路:1.中綴轉字尾

2.計算值

中綴轉字尾的步驟:

1.將讀入資料存在string中,預處理將空格全部刪除

2.順序讀入字元,如果是運算元,則存入字尾佇列中;

3.若為操作符,則與操作符棧的棧頂操作符的優先順序比較:

1)若當前操作符優先順序高於棧頂操作符優先順序,則將該操作符入操作符棧

2)若當前操作符低於棧頂操作符優先順序,則對操作符棧一直pop到字尾佇列中,直到當前棧頂操作符優先順序低於當前操作符,然後將該操作符入棧;

4.重複3直到中綴表達遍歷完畢,如果棧不空,則將剩下的操作符乙個個pop到字尾佇列中;

注意問題:1.關於數字讀入,由於是按字元讀的,所以讀入一位數字之後,進入迴圈一直讀數並轉為10進製數,直到讀到的不是數字

2.關於計算字尾表示式:每次讀入隊首元素,並時刻注意讀乙個就得在後面pop(),感覺這句很容易漏掉,若為數字則入棧,如為操作符,則從棧中pop出來兩個數,注意後pop的為被運算元,先pop的為運算元!!!然後根據操作符執行計算並將得到的結果再push棧中!重複操作,最終在棧中的數字即為最終結果!

4.另外:本題定義了乙個struct,用來儲存num/op,根據flag確定儲存的是num/op!!!

以下為書中**:

#include

#include

#include

#include

#include

#include

using namespace std;

struct node

;string str;

stack s;

queue q;

map<

char

,int

> op;

void

change()

q.push

(temp);}

else

temp.op=str[i]

; s.

push

(temp)

; i++;}

}while

(!s.

empty()

)}double

cal()}

return s.

top(

).num;

}int

main()

while

(!s.

empty()

) s.

pop();

change()

;printf

("%.2f\n"

,cal()

);}return0;

}

第七章 習題

函式模板 乙個帶類屬引數的函式。類模板 乙個帶類屬引數的類。模板函式 通過引數例項化可以再構造出具體的函式。模板類 通過引數例項化可以再構造出具體的類。1 c 支援兩種模板,一種是函式模板,另一種是類模板。2 關鍵字template是定義模板的關鍵字。3 模板引數 中包含乙個或多個用逗號分開的模板引...

第七章課後習題

1.this的三種用法 this.域變數 this.成員方法,在一些容易混淆的場合,借助this來明確表示用的是類的域變數 this 引數 引用過載的構造方法 this指代當前物件。super的兩種用法 super.域變數 super.成員方法 super 引數 繼承構造方法。2.1 用new建立物...

第七章 課後習題

某公司招聘人員,其要求為學歷本科及以上,專業為計算機 通訊 自動化,年齡22 30歲,請劃分個條件的有效等價類和無效等價類 有效等價類 無效等價類 學歷本科及以上 本科以下 專業計算機 通訊自動化 非計算機 非通訊非自動化 年齡22 30歲 小於22 大於30 以下 用於判斷閏年,由c語言書寫。其對...