陣列和鍊錶將物件插入指定位置時,大致可以分為兩個步驟:
1、找到要插入元素的位置
2、進行插入操作
可以得到等式:找到位置所需時間 + 插入所需時間 = 將物件插入指定位置所需總時間
由此可以先假設幾個值:
找到插入元素的位置涉及的變數:
要插入的位置為z
獲取乙個物件引用所需時間m
進行插入操作涉及的變數:
移動乙個物件所需的時間,陣列和鍊錶相同:x
陣列和鍊錶中的物件數為y
對於陣列:
移動元素所需時間 (插入所需時間):(y-z)x
對於鍊錶:
移動元素所需時間 (插入所需時間):2x
陣列公式->m+(y-z)x = t 中,m對t的影響因素很小,對其進行省略,可得:(y-z)x = t
鍊錶公式->m*z+2x = t 中,2x對t的影響因素很小,對其進行省略,可得:m*z = t
我們可以得出當陣列和鍊錶執行插入操作,所用時間相等時的式子:
(y-z)x = m*z
y/z = m/x + 1
由於不同環境(不同的系統、應用等),m/x的比例不同,y/z也可能不同
這裡就假設m/x = 1,可得:
y/z = 2 ; y/2 = z ;
就是說當執行插入操作的位置在物件總數的二分之一時,兩種容器插入元素所需的時間相等。
插入的位置在二分之一前時,陣列所需時間較多;
插入位置在二分之一後時,鍊錶所需時間較多。
當然,實際情況是,由於不同的計算機之間存在差異(獲取物件引用、移動物件等所需的時間不同),
陣列和鍊錶執行插入操作所需時間相等的點,並不固定。
就是說,由於實際情況不同,有可能執行插入操作的位置在3/4,但是陣列所用時間比鍊錶的多(如果x太大,或其他因素);
可能執行插入操作的位置在1/4,但是鍊錶所用時間比陣列的多(如果m太大,或其他因素)
注意:以上討論是在乙個前提下進行的,將物件插入指定位置!將物件插入指定位置!將物件插入指定位置!。
(不是按值查詢要插入物件的位置然後進行插入)
效率比較 鍊錶
單鏈表雙端鍊錶 有序鍊錶 雙向鍊錶 頭插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 1 而鍊錶查詢時最壞情況時,所查元素位於鍊錶末端,需查詢n次,時間複雜度為o n 鍊錶則具有插入刪除方便的特點,無論在什麼位置插入,只需將將其next...