陣列和鍊錶的區別

2021-10-11 23:44:08 字數 1915 閱讀 1243

陣列和鍊錶的對比

一、陣列

陣列是最基本的資料結構,所開闢的記憶體空間是連續的,且記憶體大小一經確定之後便無法再更改,以上兩點也成為陣列的缺點:浪費記憶體,缺乏彈性(不能根據當前實際需求更改大小)。而也因為開闢的記憶體空間是連續的,這也成為它的乙個優點:查詢速度快。為什麼說是查詢速度快,一方面是因為可以直接通過陣列的索引得到對應的資料,另一方面因為儲存資料的記憶體連續,就算不知道所需要的資料對應的索引,即便從頭到尾順序查詢一遍也能快速得到想要的資料。

陣列的另外乙個缺點就是:增添和刪除的效率低。因為陣列的大小在一開始就確定,無法更改,在後續想要新增或者刪除資料,不能直接往裡面新增或者刪除索引,取而代之的方法是:先複製原有的陣列,根據新增或者刪除的資料再增加或減小陣列長度,再往新的陣列中新增或刪除資料。

下面是陣列新增功能

private

int[

] data =

newint[0

];//用於存放資料的陣列

public

void

add(

int a)

data1[data1.length]

= a;

//把新增的元素放入到新陣列的最後乙個,當然這個位置也可以自己定義到任何位置

}

從陣列中刪除元素的操作和新增是大同小異的,讀者可根據上述**自己編寫

二、鍊錶

鍊錶在某些地方上就和陣列相反,例如:儲存資料的記憶體不需要連續的,鍊錶中的資料可以儲存在記憶體的任何地方,這是因為鍊錶中的每個資料都儲存了下乙個鍊錶的位址,從而使離散的記憶體空間聯絡在一起,能合理的利用記憶體。每個鍊錶包含多個節點,每個節點又包含資料域和引用域。

下面用乙個簡單的例子來說明鍊錶的靈活儲存的優點。在下圖中,只有1、3、8號記憶體空間可以儲存資料,而我們想要用長度為5的陣列去儲存這三個資料就沒有辦法實現,因為在1-10號記憶體中沒有連續的5塊可供使用的記憶體,這個時候就可以使用鍊錶,蘋果元素所在的記憶體中有下乙個元素所在的記憶體空間編號,更為靈活的使用了記憶體。

鍊錶可在任意可供使用的記憶體空間中去儲存資料,這也造成了它的缺點。查詢元素麻煩,如果要查詢鍊錶中的乙個元素,需要從第乙個元素開始,依次往下,直到找到需要的元素位置。

鍊錶的其他優點為:新增和刪除元素十分方便。只需要知道修改前乙個元素指向的位址即可。

鍊錶實現原理:1.建立節點類,並在類中寫兩個部分,資料域和引用域。

2.建立鍊錶類,需要包含頭結點,尾節點和大小,並在其中加入所需要的方法。

節點類

public

class

node

//設定下乙個節點

public

void

setnext

(node next)

//得到下乙個節點

publc node getnext()

//得到節點中的資料

public object getdata()

//給節點中的資料設定新的內容

public

void

setobject

(object data)

}

單向鍊錶類

public

class

mylinklist()

//建立鍊錶

public node creatlink()

//列印鍊錶中的資料

public

void

printlink

(node next)

}}

綜上所述,在日常使用中,若需要快速查詢訪問資料,且不經常有新增或者刪除的動作,選擇陣列較為合適;反之,選擇鍊錶。

陣列和鍊錶區別

談到鍊錶與陣列的區別,可以從幾個不同的角度來談,首先從邏輯結構上說,兩者都是資料結構的一種,但存在區別,陣列是申請的一塊連續的記憶體空間,並且是在編譯階段就要確定空間大小的,同時在執行階段是不允許改變的,所以它不能夠隨著需要的改變而增加或減少空間大小,所以當資料量大的時候,有可能超出了已申請好的陣列...

陣列和鍊錶的區別

陣列與鍊錶的區別 1.基於空間的考慮 陣列的儲存空間是靜態,連續分布的,估計過大造成空間浪費,估計太小又將使空間溢位機會增多。而鍊錶的儲存空間是動態分布的,只要記憶體空間尚有空閒,就不會產生溢位 鍊錶中每個節點除了資料域外,還有指標域,儲存密度小於1 陣列為 儲存空間利用率就越高。2.基於時間的考慮...

陣列和鍊錶的區別

1 陣列的儲存空間是一大片連續的,鍊錶的儲存空間是不定的,每個鍊錶的節點元素都會儲存該節點的資料和下個節點的位址指向。陣列初使化必須制定大小,而鍊錶卻不需要便是這個原因。2 就增刪改查而言,陣列因為位址是連續的,所以陣列的查詢修改很快,但是增刪的時候由於需要移動後面所有的元素反而較慢,對應的鍊錶在查...