陣列與鍊錶

2021-08-21 04:50:12 字數 1142 閱讀 4973

陣列和鍊錶簡介

在計算機中要對給定的資料集進行若干處理,首要任務是把資料集的一部分(當資料量非常大時,可能只能一部

分一部分地讀取資料到記憶體中來處理)或全部儲存到記憶體中,然後再對記憶體中的資料進行各種處理。

例如,對於資料集 s,要求 s 中元素的和,首先要把資料儲存到記憶體中,然後再將記憶體中的

資料相加。

當記憶體空間中有足夠大的連續空間時,可以把資料連續的存放在記憶體中,各種程式語言中的陣列一般都是按這種

方式儲存的(也可能有例外),如圖 1(b);當記憶體中只有一些離散的可用空間時,想連續儲存資料就非常困難了,

這時能想到的一種解決方式是移動記憶體中的資料,把離散的空間聚集成連續的一塊大空間,如圖 1(c)所示,這樣做

當然也可以,但是這種情況因為可能要移動別人的資料,所以會存在一些困難,移動的過程中也有可能會把一些別人

的重要資料給丟失。另外一種,不影響別人的資料儲存方式是把資料集中的資料分開離散地儲存到這些不連續空間中,

樣只要知道第一塊記憶體空間的位址就能環環相扣地把資料集整體聯絡在一起了。c/c++中用指標實現的鍊錶就是這種

儲存形式。

由上可知,記憶體中的儲存形式可以分為連續儲存和離散儲存兩種。因此,資料的物理儲存結構就有連續儲存和離

散儲存兩種,它們對應了我們通常所說的陣列和鍊錶,

陣列和鍊錶的區別

率比較高;它的缺點:在儲存之前,我們需要申請一塊連續的記憶體空間,並且在編譯的時候就必須確定好它的空間的大

小。在執行的時候空間的大小是無法隨著你的需要進行增加和減少而改變的,當資料兩比較大的時候,有可能會出現

越界的情況,資料比較小的時候,又有可能會浪費掉記憶體空間。在改變資料個數時,增加、插入、刪除資料效率比較低

鍊錶是動態申請記憶體空間,不需要像陣列需要提前申請好記憶體的大小,鍊錶只需在用的時候申請就可以,根據需

要來動態申請或者刪除記憶體空間,對於資料增加和刪除以及插入比陣列靈活。還有就是鍊錶中資料在記憶體中可以在任

意的位置,通過應用來關聯資料(就是通過存在元素的指標來聯絡)

鍊錶和陣列使用場景

陣列應用場景:資料比較少;經常做的運算是按序號訪問資料元素;陣列更容易實現,任何高階語言都支援;構建

的線性表較穩定。

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

陣列與鍊錶

陣列,在記憶體上給出了連續的空間.鍊錶,記憶體位址上可以是不連續的,每個鍊錶的節點包括原來的記憶體和下乙個節點的資訊 單向的乙個,雙向鍊錶的話,會有兩個 優點 使用方便 查詢效率 比煉表高,記憶體為一連續的區域 缺點 大小固定,不適合動態儲存,不方便動態新增 優點 可動態新增刪除 大小可變 缺點 只...

陣列與鍊錶

使用陣列意味著所有待辦事項在記憶體中都是相連的 緊靠在一起的 所以在陣列中新增新元素也可能很麻煩。如果沒有了空間,就得移到記憶體的其他地方,因此新增新元素的速度會很慢。一種解決之道是 預留座位 即便當前只有3個待辦事項,也請計算機提供10個位置,以防需要新增待辦事項。這樣,只要待辦事項不超過10個,...

陣列與鍊錶

陣列與鍊錶的優缺點 陣列鍊錶 記憶體區域 連續的記憶體區域 散亂的記憶體區域 訪問資料 隨機訪問 即給的序號即可訪問資料 時間複雜度o 1 按序訪問,時間複雜度 o n 新增元素 1.預留足夠大的空間,會發生資料遷移 時間複雜度o n 2.空間如果不夠,需要開闢更大的記憶體空間,然後遷移資料 時間複...