線性表:
順序線性表和連結串列
順序線性表:
- 就是陣列(c語言),初始化固定陣列的大小,申請連續的記憶體分配。
- 可能面臨的問題有:陣列邊界溢位,不夠存,需要重新申請新的連續的記憶體空間,造成記憶體浪費,效能下降,擴充性差。
- 陣列實際大小可能沒有等於初始化定義的,也造成記憶體浪費。
- 但是相對連結串列來說,陣列的優點是透過陣列下標可以快速找到資料的記憶體地址,查詢效率高(o(1)),但是相反,插入和刪除資料,後面的資料都要進行移動,效率低(o(n))。
連結串列:
- 分為單向連結串列、雙向連結串列、迴圈連結串列等。
- 跟陣列最大的不同的是,連結串列是不連續的記憶體,其利用的是整合碎片記憶體空間起來組成一個連結串列,合理利用和節約了記憶體空間,提高效能。
- 資料變動不會受到類似陣列邊界等限制,動態能力比較高,擴充性好。
- 單向連結串列查詢資料的效率需要從表頭一步一步的往下找,查詢效率低(o(n))。
- 雙向連結串列就是為了解決查詢效率問題而誕生的,其可以從連結串列的任何一個位置從兩邊開始尋找,使用二分法查詢的效率明顯提高了,查詢效率最高的還是陣列。
- 雙向連結串列比單向連結串列多了一個屬性,來指向上一個節點的地址,其查詢效率是用過犧牲空間換時間的做法。
- 連結串列的插入和刪除效率(o(1))比陣列高,因為它不涉及到後面整組資料的變動,只需要前或者前後的指向屬性做修改就可以了。
單向連結串列結構圖:
用物件導向的思想就是有兩個屬性,一個是值,一個是指向。末尾的指標指向空值
雙向連結串列結構圖:
有三個屬性,一個是值,一個是前一個節點的指標 ,一個是下一個節點的指標,前後的指標指向空值
總結:
本作品採用《CC 協議》,轉載必須註明作者和本文連結