數組與鏈表

數組&鏈表比較

數組

使用數組意味着所有待辦事項在內存中都是相連的(緊靠在一起的)。所以在數組中添加新元素也可能很麻煩。如果沒有了空間,就得移到內存的其他地方,因此添加新元素的速度會很慢。一種解決之道是“預留座位”:即便當前只有3個待辦事項,也請計算機提供10個位置,以防需要添加待辦事項。這樣,只要待辦事項不超過10個,就無需轉移。這是一個不錯的權變措施,但你應該明白,它存在如下兩個缺點。

你額外請求的位置可能根本用不上,這將浪費內存。你沒有使用,別人也用不了。待辦事項超過10個後,你還得轉移。

鏈表

鏈表中的元素可存儲在內存的任何地方。鏈表的每個元素都存儲了下一個元素的地址,從而使一系列隨機的內存地址串在一起。使用鏈表時,根本就不需要移動元素。這猶如尋寶遊戲。你前往第一個地址,那裏有一張紙條寫着“下一個元素的地址爲123”。因此,你前往地址123,那裏又有一張紙條,寫着“下一個元素的地址爲847”,以此類推。在鏈表中添加元素很容易:只需將其放入內存,並將其地址存儲到前一個元素中。

使用鏈表時,根本就不需要移動元素。這還可避免另一個問題。假設你與五位朋友去看一部很火的電影。你們六人想坐在一起,但看電影的人較多,沒有六個在一起的座位。使用數組時有時就會遇到這樣的情況。假設你要爲數組分配10 000個位置,內存中有10 000個位置,但不都靠在一起。在這種情況下,你將無法爲該數組分配內存!鏈表相當於說“我們分開來坐”,因此,只要有足夠的內存空間,就能爲鏈表分配內存。

鏈表的優勢在插入元素方面,那數組的優勢又是什麼呢?

在需要讀取鏈表的最後一個元素時,你不能直接讀取,因爲你不知道它所處的地址,必須先訪問元素#1,從中獲取元素#2的地址,再訪問元素#2並從中獲取元素#3的地址,以此類推,直到訪問最後一個元素。需要同時讀取所有元素時,鏈表的效率很高:你讀取第一個元素,根據其中的地址再讀取第二個元素,以此類推。但如果你需要跳躍,鏈表的效率真的很低。

數組與此不同:你知道其中每個元素的地址。(因爲是按順序存儲的)只需執行簡單的數學運算就知道。需要隨機地讀取元素時,數組的效率很高,因爲可迅速找到數組的任何元素。在鏈表中,元素並非靠在一起的,你無法迅速計算出第五個元素的內存地址,而必須先訪問第一個元素以獲取第二個元素的地址,再訪問第二個元素以獲取第三個元素的地址,以此類推,直到訪問第五個元素。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章