鏈表
鏈表是一種常見的數據組織形式,它采用動態分配內存的形式實現。需要時可以用new分配內存空間,不需要時用delete將已分配的空間釋放,不會造成內存空間的浪費。
一、 從邏輯結構來看
- 數組必須事先定義固定的長度(元素個數),不能適應數據動態地增減的情況。當數據增加時,可能超出原先定義的元素個數;當數據減少時,造成內存浪費。
- 鏈表動態地進行存儲分配,可以適應數據動態地增減的情況,且可以方便地插入、刪除數據項。(數組中插入、刪除數據項時,需要移動其它數據項)
二、從內存存儲來看
- (靜態)數組從棧中分配空間,對於程序員方便快速,但是自由度小。
- 鏈表從堆中分配空間,自由度大但是申請管理比較麻煩。
三、其他區別對比
-
數組中的數據在內存中的按順序存儲的,而鏈表是隨機存儲的!
-
要訪問數組中的元素可以按下標索引來訪問,速度比較快,如果對他進行插入操作的話,就得移動很多元素,所以對數組進行插入操作效率很低!
-
由於連表是隨機存儲的,鏈表在插入,刪除操作上有很高的效率(相對數組),如果要訪問鏈表中的某個元素的話,那就得從鏈表的頭逐個遍歷,直到找到所需要的元素為止,所以鏈表的隨機訪問的效率就比數組要低。
-
數組在內存中開辟連續的一塊區域,如果一個數據要兩個內存單元,一組5個數據10個單元就夠了,無需標記其地址,因為數組定義時候標頂了第一個原許的地址,其他四個都知道了。
-
鏈表可可以是連續的,也可以是不連續的,但一般都是不連續的,盡管在內存中是連續的,我們也不把他當作是連續的,而是把他當作是不連續的,因為如果把他當作是連續的,不如當作是數組了,在某些情況下。一鏈5個數據,如果每個數據本身用2個內存單元,那么10個單元是不夠的,因為每個數據都要表示出下個數據在哪里,所以一個數據本身用2個單元,再用1個單元表示此鏈下一個數據在什么地址。