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