1、訪問(讀寫)方式
順序表可以順序訪問,也可以隨機訪問;鍊錶只能從表頭順序訪問元素。
例如:在第 i 個位置上執行訪問操作,順序表只需訪問一次,而鍊錶則需要從表頭開始依次訪問 i 次。
2、邏輯結構與物理結構
採用順序訪問時,邏輯結構上相鄰的元素,對應的物理儲存位置也是相鄰的;而採用鏈式儲存時,邏輯結構上相鄰的元素,物理儲存位置則不一定相鄰,對應的邏輯關係也是通過指標鏈結來表示的。
3、查詢,插入和刪除操作
對於按值查詢,順序表無序時,兩者的時間複雜度均為o(n);當順序表有序時,可採用折半查詢,此時的時間複雜度為0(log2n);
對於按序號查詢,順序表支援隨機訪問,時間複雜度僅為o(1),而鍊錶的平均時間複雜度為o(n);
順序表的插入,刪除操作,平均需要移動半個表長的元素,鍊錶的插入,刪除操作,只需要修改相關結點的指標域即可,由於鍊錶的每個結點都帶有指標域,故其儲存密度不夠大。
4、空間分配
順序儲存在靜態儲存分配情形下,一旦儲存空間裝滿就不能擴充了,若要再加入新的元素,則會出現記憶體溢位,因此需要預先分配儲存空間;若預先分配空間過大,可能會導致順序表後部大量閒置,若預先分配空間過小,又會造成溢位;動態儲存分配雖然儲存空間可以擴充,但是需要移動大量元素,導致操作效率降低,而且若記憶體中沒有更大塊的連續儲存空間,則會導致分配失敗;鏈式儲存的結點空間只在需要的時申請分配,只要記憶體有空間就可以分配,操作靈活,高效。
1、基於儲存的考慮
難以估計線性表的長度或者儲存規模時,不易採用順序表;鍊錶不用事先估計儲存規模;
2、基於運算的考慮
按序號訪問時,順序表優先於鍊錶;
在需要進行插入,刪除操作時,鍊錶優於順序表;
3、基於環境的考慮
順序表比較容易實現,任何高階語言都有陣列型別,但鍊錶的操作是基於指標的。
線性表和鍊錶
線性表在python中有元組 列表 集合以及字典,非線性表目前介紹鍊錶。名稱 儲存型別 是否可變 是否有序 儲存是否可重複 列表1.使用中括號括起來 如 list 1,2,3,4 2.可以儲存任何型別 3.可以儲存不同型別的資料 不建議 可以增 刪 改 查 是 是 元組1.使用小括號括起來 如 tu...
線性表 鍊錶
線性表的adt list.h 線性表的c 抽象類宣告 templateclass list 單鏈表節點的定義 link.h 單鏈表節點類的定義 template class link link link nextval null 鍊錶的實現宣告 成員函式的是實現 鍊錶的實現宣告 include st...
線性表 鍊錶
include include typedef int elemtype typedef struct node lnode,linklist linklist createlinklist1 頭插法 linklist createlinklist2 尾插法 void lengthlinklist ...