三大資料結構的實現方式
資料結構
實現方式
棧 陣列/
單鏈表佇列
陣列/雙端鍊錶
優先順序佇列
陣列/堆
/有序鍊錶
雙端佇列
雙向鍊錶
陣列與鍊錶實現方式的比較
陣列與鍊錶都很快
如果能精確**棧或者佇列所需要容納的資料量 --- 陣列
如果不能 --- 鍊錶
陣列的效率
無序陣列
有序陣列
查詢比較次數o(n)
比較次數o(logn)<—二分查詢
插入o(1)
比較次數o(n)
移動次數maxo(n)
刪除比較次數o(n)
比較次數o(logn)
移動次數maxo(n)
移動次數maxo(n)
鍊錶的效率
單鏈表雙端鍊錶
有序鍊錶
雙向鍊錶
頭插o(1)
o(1)
頭刪o(1)
o(1)
尾插o(1)
o(1)
尾刪o(n)
o(1)
插入max o(n) | min o(n/2)
刪除o(1)
查詢結點
o(n) 次比較 無移動次數
刪除結點
o(n) 次比較 無移動次數
o(n) – deletekey(int i)
指定結點後插入
o(n) 次比較 無移動次數
o(n) – insertafter(int i)
鍊錶優點
l 使用記憶體無限制 可以擴充套件到所有可以使用的記憶體
陣列大小在建立的時候 就固定了經常由於陣列太大 導致效率低下 或者陣列太小導致空間溢位
l 插入刪除結點的時候 鍊錶不需要任何移動 特別是複製時間遠遠大於比較時間的時候
雙向鍊錶
優點:
前向遍歷
後向遍歷
缺點:
每次插入或者刪除乙個鏈結點時候 需要處理四個鏈結點的引用(2個連線前乙個鏈結點 兩個鏈結後乙個)由於多了兩個引用 鏈結點占用的空間也變大了
效率比較 鍊錶
單鏈表雙端鍊錶 有序鍊錶 雙向鍊錶 頭插o 1 o 1 頭刪o 1 o 1 尾插o 1 o 1 尾刪o n o 1 插入max o n min o n 2 刪除o 1 查詢結點 o n 次比較 無移動次數 刪除結點 o n 次比較 無移動次數 o n deletekey int i 指定結點後插入 ...
陣列和鍊錶插入效率比較
陣列和鍊錶將物件插入指定位置時,大致可以分為兩個步驟 1 找到要插入元素的位置 2 進行插入操作 可以得到等式 找到位置所需時間 插入所需時間 將物件插入指定位置所需總時間 由此可以先假設幾個值 找到插入元素的位置涉及的變數 要插入的位置為z 獲取乙個物件引用所需時間m 進行插入操作涉及的變數 移動...
表 陣列 鍊錶
陣列 陣列是個表,是個連續儲存的表。在c裡面,首先我們知道陣列容量是固定的,使用前先分配大小,所以使用後就不是很方便調整容量 解決這個問題在c裡面一般是預先估計陣列的大小,然後用雙倍的容量建立陣列,是不是很麻煩?正因為陣列是連續儲存和容量固定,所以注定陣列不方便進行增刪這種改變容量的操作。原因是假如...