陣列和鍊錶的對比
一、陣列
陣列是最基本的資料結構,所開闢的記憶體空間是連續的,且記憶體大小一經確定之後便無法再更改,以上兩點也成為陣列的缺點:浪費記憶體,缺乏彈性(不能根據當前實際需求更改大小)。而也因為開闢的記憶體空間是連續的,這也成為它的乙個優點:查詢速度快。為什麼說是查詢速度快,一方面是因為可以直接通過陣列的索引得到對應的資料,另一方面因為儲存資料的記憶體連續,就算不知道所需要的資料對應的索引,即便從頭到尾順序查詢一遍也能快速得到想要的資料。
陣列的另外乙個缺點就是:增添和刪除的效率低。因為陣列的大小在一開始就確定,無法更改,在後續想要新增或者刪除資料,不能直接往裡面新增或者刪除索引,取而代之的方法是:先複製原有的陣列,根據新增或者刪除的資料再增加或減小陣列長度,再往新的陣列中新增或刪除資料。
下面是陣列新增功能
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 就增刪改查而言,陣列因為位址是連續的,所以陣列的查詢修改很快,但是增刪的時候由於需要移動後面所有的元素反而較慢,對應的鍊錶在查...