數組和鏈表的適用場景

  • 簡介

在計算機中要對給定的數據集進行若干處理,首要任務是把數據集的一部分(當數據量非常大時,可能只能一部分一部分地讀取數據到內存中來處理)或全部存儲到內存中,然後再對內存中的數據進行各種處理。例如,對於數據集 S{1,2,3,4,5,6},要求 S 中元素的和,首先要把數據存儲到內存中,然後再將內存中的數據相加。當內存空間中有足夠大的連續空間時,可以把數據連續的存放在內存中,各種編程語言中的數組一般都是按這種方式存儲的(也可能有例外),如下圖 (b);當內存中只有一些離散的可用空間時,想連續存儲數據就非常困難了,這時能想到的一種解決方式是移動內存中的數據,把離散的空間聚集成連續的一塊大空間,如下圖 (c)所示,這樣做當然也可以,但是這種情況因爲可能要移動別的數據,所以會存在一些困難,移動的過程中也有可能會把一些別的重要數據給丟失。另外一種,不影響別的數據存儲方式是把數據集中的數據分開離散地存儲到這些不連續空間中,如下圖(d)。這時爲了能把數據集中的所有數據聯繫起來,需要在前一塊數據的存儲空間中記錄下一塊數據的地址,這樣只要知道第一塊內存空間的地址就能環環相扣地把數據集整體聯繫在一起了。C/C++中用指針實現的鏈表就是這種存儲形式。

由上可知,內存中的存儲形式可以分爲連續存儲和離散存儲兩種。因此,數據的物理存儲結構就有連續存儲和離散存儲兩種,它們對應了我們通常所說的數組和鏈表。

  • 區別

數組是將元素在內存中連續存儲的;它的優點:因爲數據是連續存儲的,內存地址連續,所以在查找數據的時候效率比較高;它的缺點:在存儲之前,我們需要申請一塊連續的內存空間,並且在編譯的時候就必須確定好它的空間的大小。在運行的時候空間的大小是無法隨着你的需要進行增加和減少而改變的,當數據兩比較大的時候,有可能會出現越界的情況,數據比較小的時候,又有可能會浪費掉內存空間。在改變數據個數時,增加、插入、刪除數據效率比較低。

鏈表是動態申請內存空間,不需要像數組需要提前申請好內存的大小,鏈表只需在用的時候申請就可以,根據需要來動態申請或者刪除內存空間,對於數據增加和刪除以及插入比數組靈活。還有就是鏈表中數據在內存中可以在任意的位置,通過應用來關聯數據(就是通過存在元素的指針來聯繫)。

  • 適用場景

數組:數據比較少;經常做的運算是按序號訪問數據元素;數組更容易實現,任何高級語言都支持;構建的線性表較穩定。

鏈表:對線性表的長度或者規模難以估計;頻繁做插入刪除操作;構建動態性比較強的線性表。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章