數組的優勢:數組
數組的缺點:spa
鏈表的優勢:索引
鏈表在物理上是動態地分配儲存空間,不要求連續性,可是要求邏輯上的連續。它須要存儲每一個元素在內存中的地址,以及它相鄰元素的地址,而後像鏈條同樣把各元素鏈起來,保證了在邏輯上的連續性。
好比:
單鏈表,每一個元素除了存儲自己的值外,還存儲了前驅的引用,也就是存儲了前驅所在的內存地址信息。
雙鏈表就是不只存儲了前驅的引用還存儲了後繼的引用.內存
增長元素的時候,只需給增長元素添加其前元素或後元素的地址;刪除元素的時候,修改目標元素前驅和後驅的首位鏈接地址. 故此爲增刪快。效率
鏈表的缺點:遍歷
內存中的存儲形式能夠分爲連續存儲和離散存儲兩種。所以,數據的物理存儲結構就有連續存儲和離散存儲兩種,它們對應了咱們一般所說的數組和鏈表。引用
由於數組是連續存儲的,在操做數組中的數據時就能夠根據離首地址的偏移量直接存取相應位置上的數據,可是若是要在數據組中任意位置上插入一個元素,就須要先把後面的元素集體向後移一位爲其空出存儲空間。鏈表
與之相反,鏈表是離散存儲的,因此在插入一個數據時只要申請一片新空間,而後將其中的鏈接關係作一個修改就能夠,可是顯然在鏈表上查找一個數據時就要逐個遍歷了。
考慮以上的總結可見,數組和鏈表各有優缺點。在具體使用時要根據具體狀況選擇。當查找數據操做比較多時最好用數組;當對數據集中的數據進行添加或刪除比較多時最好選擇鏈表。總結
數組就像身上編了號站成一排的人,要找第10我的很容易,根據人身上的編號很快就能找到。但插入、刪除慢,要望某個位置插入或刪除一我的時,後面的人身上的編號都要變。固然,加入或刪除的人始終末尾的也快數據
鏈表就像手牽着手站成一圈的人,要找第10我的不容易,必須從第一我的一個個數過去。但插入、刪除快。插入時只要解開兩我的的手,並從新牽上新加進來的人的手就能夠。刪除同樣的道理。
總結:
數組靜態分配內存,鏈表動態分配內存;
數組在內存中連續,鏈表不連續;
數組元素在棧區,鏈表元素在堆區;
數組利用下標定位,時間複雜度爲O(1),鏈表定位元素時間複雜度O(n);
數組插入或刪除元素的時間複雜度O(n),鏈表的時間複雜度O(1);