2017年1月12日 星期四

CS50 Week 5

Lecture

用scanf()代替CS50的GetInt() or GetString()

動態記憶體配置:
假設原本已經使用陣列做好一個班級50個人的姓名、性別、年齡的基本資料,突然某天有新的同學加入這個班級,那原本的陣列就會不夠了。因此,就要用指標的方式動態指定資料大小,程式碼如下:

使用過GetInt() or scanf()都要記得釋放記憶體free()

Lecture, continued

這段其實大部分沒有聽懂,因為我都是聽到打瞌睡...
Anyway, 我還是盡我所能講述我聽懂的,這段有講到二元搜尋樹如下圖:


跟一些Hash...不過講的沒很詳細...應該會在下一個section會講比較詳細,到時再來分享心得@@


Shorts

原本我是上2016的版本,可是今天他們更新成2017了,因此,我的心得版本會跟其他人不一樣了@@。


Doubly-Linked Lists

是由一群節點組成,每個節點都包含兩個fields稱為連結,他們是參考前一個節點和下一個節點,通常第一個節點的前一個連結和最後一個節點的後一個連結都是指向null,參考下圖:

File Pointers

當我們想要永久儲存資料時就會把資料儲存到電腦裡,因此,有六個函數可供我們使用。
  1. fopen():顧名思義就是開啟一個我們要儲存資料的檔案。
  2. fclose():有開啟當然也有關閉囉。
  3. fgetc():從檔案裡取得一個字元,因為是獲得,所以開啟的檔案必須是以讀檔模式。
  4. fputc():有取得當然也有放入寫入。
  5. fread():將檔案的內容寫入到陣列或結構中。
  6. fwrite():將陣列或結構的內容寫入到檔案中。


Hash Tables

是根據(Key)而直接查詢在內存存儲位置的資料結構。也就是說,它通過計算一個關於鍵值的函數,將所需查詢的數據映射到表中一個位置來查詢記錄,這加快了查找速度。這個映射函數稱做雜湊函數,存放記錄的數組稱做雜湊表。

一個通俗的例子是,為了查找電話簿中某人的號碼,可以創建一個按照人名首字母順序排列的表(即建立人名{\displaystyle x}到首字母{\displaystyle F(x)}的一個函數關係),在首字母為W的表中查找「王」姓的電話號碼,顯然比直接查找就要快得多。這裡使用人名作為關鍵字,「取首字母」是這個例子中雜湊函數的函數法則{\displaystyle F()},存放首字母的表對應雜湊表。關鍵字和函數法則理論上可以任意確定。


Singly-Linked Lists

單向鍊表其特點是鍊結的方向是單向的,對鍊表的訪問是要按照順序讀取從頭開始。


沒有留言:

張貼留言