使用陣列意味著所有待辦事項在記憶體中都是相連的(緊靠在一起的)。所以在陣列中新增新元素也可能很麻煩。如果沒有了空間,就得移到記憶體的其他地方,因此新增新元素的速度會很慢。一種解決之道是「預留座位」:即便當前只有3個待辦事項,也請計算機提供10個位置,以防需要新增待辦事項。這樣,只要待辦事項不超過10個,就無需轉移。這是乙個不錯的權變措施,但你應該明白,它存在如下兩個缺點。
你額外請求的位置可能根本用不上,這將浪費記憶體。你沒有使用,別人也用不了。待辦事項超過10個後,你還得轉移。
鍊錶中的元素可儲存在記憶體的任何地方。鍊錶的每個元素都儲存了下乙個元素的位址,從而使一系列隨機的記憶體位址串在一起。使用鍊錶時,根本就不需要移動元素。這猶如尋寶遊戲。你前往第乙個位址,那裡有一張紙條寫著「下乙個元素的位址為123」。因此,你前往位址123,那裡又有一張紙條,寫著「下乙個元素的位址為847」,以此類推。在鍊錶中新增元素很容易:只需將其放入記憶體,並將其位址儲存到前乙個元素中。
使用鍊錶時,根本就不需要移動元素。這還可避免另乙個問題。假設你與五位朋友去看一部很火的電影。你們六人想坐在一起,但看電影的人較多,沒有六個在一起的座位。使用陣列時有時就會遇到這樣的情況。假設你要為陣列分配10 000個位置,記憶體中有10 000個位置,但不都靠在一起。在這種情況下,你將無法為該陣列分配記憶體!鍊錶相當於說「我們分開來坐」,因此,只要有足夠的記憶體空間,就能為鍊錶分配記憶體。
鍊錶的優勢在插入元素方面,那陣列的優勢又是什麼呢?
在需要讀取鍊錶的最後乙個元素時,你不能直接讀取,因為你不知道它所處的位址,必須先訪問元素#1,從中獲取元素#2的位址,再訪問元素#2並從中獲取元素#3的位址,以此類推,直到訪問最後乙個元素。需要同時讀取所有元素時,鍊錶的效率很高:你讀取第乙個元素,根據其中的位址再讀取第二個元素,以此類推。但如果你需要跳躍,鍊錶的效率真的很低。
陣列與此不同:你知道其中每個元素的位址。(因為是按順序儲存的)只需執行簡單的數**算就知道。需要隨機地讀取元素時,陣列的效率很高,因為可迅速找到陣列的任何元素。在鍊錶中,元素並非靠在一起的,你無法迅速計算出第五個元素的記憶體位址,而必須先訪問第乙個元素以獲取第二個元素的位址,再訪問第二個元素以獲取第三個元素的位址,以此類推,直到訪問第五個元素。
陣列與鍊錶
陣列和鍊錶簡介 在計算機中要對給定的資料集進行若干處理,首要任務是把資料集的一部分 當資料量非常大時,可能只能一部 分一部分地讀取資料到記憶體中來處理 或全部儲存到記憶體中,然後再對記憶體中的資料進行各種處理。例如,對於資料集 s,要求 s 中元素的和,首先要把資料儲存到記憶體中,然後再將記憶體中的...
陣列與鍊錶
陣列,在記憶體上給出了連續的空間.鍊錶,記憶體位址上可以是不連續的,每個鍊錶的節點包括原來的記憶體和下乙個節點的資訊 單向的乙個,雙向鍊錶的話,會有兩個 優點 使用方便 查詢效率 比煉表高,記憶體為一連續的區域 缺點 大小固定,不適合動態儲存,不方便動態新增 優點 可動態新增刪除 大小可變 缺點 只...
陣列與鍊錶
陣列與鍊錶的優缺點 陣列鍊錶 記憶體區域 連續的記憶體區域 散亂的記憶體區域 訪問資料 隨機訪問 即給的序號即可訪問資料 時間複雜度o 1 按序訪問,時間複雜度 o n 新增元素 1.預留足夠大的空間,會發生資料遷移 時間複雜度o n 2.空間如果不夠,需要開闢更大的記憶體空間,然後遷移資料 時間複...