數組和鏈表是兩種基本的數據結構,他們在內存存儲上的表現不同,因此也有各自的特色。數組
鏈表中各結點在內存中的存放位置是任意的。 數據結構
鏈表與數組的主要區別
(1)數組的元素個數是固定的,而組成鏈表的結點個數可按須要增減;spa
(2)數組元素的存諸單元在數組定義時分配,鏈表結點的存儲單元在程序執行時動態向系統申請:指針
(3)數組中的元素順序關係由元素在數組中的位置(即下標)肯定,鏈表中的結點順序關係由結點所包含的指針來體現。內存
(4)對於不是固定長度的列表,用可能最大長度的數組來描述,會浪費許多內存空間。效率
(5)對於元素的插人、刪除操做很是頻繁的列表處理場合,用數組表示列表也是不適宜的。若用鏈表實現,會使程序結構清晰,處理的方法也較爲簡便。擴展
例如:在一個列表中間要插人一個新元素,如用數組表示列表,爲完成插人工做,插人處以後的所有元素必須向後移動一個位置空出的位置用於存儲新元素。遍歷
對於在一個列表中刪除一個元素狀況,爲保持數組中元素相對位置連續遞增,刪除處以後的元素都得向前移一個位置。如用鏈表實現列表.鏈表結點的插人或刪除操做再也不須要移動結點,只需改變相關的結點中的後繼結點指針的值便可,與結點的實際存儲位置無關。程序
數組的特色
- 在內存中,數組是一塊連續的區域。
- 數組須要預留空間,在使用前要先申請佔內存的大小,可能會浪費內存空間。
- 插入數據和刪除數據效率低,插入數據時,這個位置後面的數據在內存中都要向後移。
- 隨機讀取效率很高。由於數組是連續的,知道每個數據的內存地址,能夠直接找到給定地址的數據。
- 而且不利於擴展,數組定義的空間不夠時要從新定義數組。
鏈表的特色
- 在內存中能夠存在任何地方,不要求連續。
- 每個數據都保存了下一個數據的內存地址,經過這個地址找到下一個數據。 第一我的知道第二我的的座位號,第二我的知道第三我的的座位號……
- 增長數據和刪除數據很容易。 再來我的能夠隨便坐,好比來了我的要作到第三個位置,那他只須要把本身的位置告訴第二我的,而後問第二我的拿到原來第三我的的位置就好了。其餘人都不用動。
- 查找數據時效率低,由於不具備隨機訪問性,因此訪問某個位置的數據都要從第一個數據開始訪問,而後根據第一個數據保存的下一個數據的地址找到第二個數據,以此類推。 要找到第三我的,必須從第一我的開始問起。
- 不指定大小,擴展方便。鏈表大小不用定義,數據隨意增刪。
各自的優缺點
數組的優勢
數組的缺點
- 插入和刪除效率低
- 可能浪費內存
- 內存空間要求高,必須有足夠的連續內存空間。
- 數組大小固定,不能動態拓展
鏈表的優勢
- 插入刪除速度快
- 內存利用率高,不會浪費內存
- 大小沒有固定,拓展很靈活。
鏈表的缺點