為什麼陣列查詢比連結串列要快?而插入刪除比連結串列效率低

weixin_33728268發表於2019-01-24

問:為什麼陣列查詢比連結串列要快?而插入刪除比連結串列效率低

已知:

1、資料儲存結構分為順序儲存、連結儲存、索引儲存、雜湊儲存。
2、陣列屬於順序儲存,用一段連續的記憶體位置來儲存。
3、連結串列屬於連結儲存,用一組任意的儲存單元來儲存,不要求物理上相鄰。

抽象:

1、順序儲存可以想象成吃飯排隊,每個人領的號都是按順序來的,服務員只要喊號就裡立即可以找到對應的人,新來的人都自動加到隊尾,如果有人想插隊,那麼從他插隊的位置後面所有的人都要挪動位置。
2、連結儲存可以想象成手拉手做遊戲,每個人只知道自己手拉的是誰,想要找到某個人必須從一個節點開始往一個方向按順序一個一個查,直到查到這個人,新來的人可以插到任意兩個人之間,只要原來的那兩個人把手放開,和新來的拉起手即可,不需要其他人都跟著挪動。

查詢涉及到CPU特性

處理速度由快到慢排序:
1、CPU暫存器
2、CPUL1快取
3、CPUL2快取
4、記憶體
5、硬碟

總結:

因為CPU快取會讀入一段連續的記憶體,順序儲存符合連續的記憶體,所以順序儲存可以被快取處理,而連結儲存並不是連續的,分散在堆中,所以只能記憶體去處理。
所以陣列查詢比連結串列要快。
而陣列大小固定,插入和刪除都需要移動元素,連結串列可以動態擴充,插入刪除不需要移動元素,只需要更改元素中的指標。所以連結串列的插入刪除比陣列效率高。

多說一句:查詢比陣列快,刪除插入效率又高的方式就是雜湊儲存,雜湊是什麼?雜湊的英文:hash

相關文章