資料結構基礎之陣列和鍊錶

2021-10-10 12:56:42 字數 1458 閱讀 1377

陣列

陣列(array):是有限個相同型別的變數所組成的有序集合。陣列中每個變數被稱為元素。

陣列是最簡單、最常用的資料結構。

陣列的另乙個特點,在記憶體中順序儲存。陣列中每乙個元素,都儲存在小小的記憶體單元中,並且元素之間緊密排列,既不能打亂元素的儲存順序,也不能跳過某個儲存單元進行儲存。

陣列操作:增(o(n))、刪(o(n))、改(o(1))、查(o(1))

陣列適合讀操作多、寫操作少的場景

鍊錶鍊錶(linked list)是一種在物理上非連續、非順序的資料結構,由若干節點(node)組成。

單向鍊錶的每乙個節點又包含兩部分,一部分是存放資料的變數data,另一部分是指向下乙個節點的指標next。

鍊錶的第乙個節點被稱為頭節點,最後乙個節點被稱為尾節點,尾節點的next指標指向空。

要想讓每個節點都能回溯到它的前置節點,我們可以使用雙向鍊錶。

雙向鍊錶比單向鍊錶稍複雜,它的每乙個節點除了擁有data和next指標,還擁有指向前置節點的prev指標。

儲存方式

陣列在記憶體中的儲存方式是順序儲存,鍊錶在記憶體中儲存方式是隨機儲存。

鍊錶的基本操作

查詢節點 鍊錶中的資料只能按順序訪問,最壞的時間複雜度是o(n)。

更新節點

插入節點 尾部插入、頭部插入、中間插入

刪除元素 尾部刪除、頭部刪除、中間刪除

插入節點情況分析

尾部插入是最簡單的情況,把最後乙個節點的next指標指向新插入的節點即可。

頭部插入分兩步,第一步把新節點的next指標指向原先的頭節點,第二步把新節點變為鍊錶的頭節點。

中間插入也分兩步,第一步新節點的next指標,指向插入位置的節點,第二步插入位置前置節點的next指標指向新節點。

刪除元素情況分析

尾部刪除是最簡單的情況,把倒數第二個節點的next指標指向空即可。

頭部刪除,把鍊錶的頭節點設為原先頭節點的next指標即可。

中間刪除,把要刪除節點的前置節點的next指標,指向要刪除元素的下乙個節點即可。

陣列和鍊錶相關操作效能對比

查詢更新

插入刪除

陣列o(1)

o(1)

o(n)

o(n)

鍊錶o(n)

o(1)

o(1)

o(1)

從**可以看出,陣列的優勢在快速定位元素,適合讀操作多,寫操作少的場景;相反,鍊錶的優勢在於能夠靈活的進行插入和刪除操作,適合寫操作多,讀操作少的場景。

23 資料結構之陣列和鍊錶

特點 查詢和修改快 增加和刪除慢 arraylist和vector的底層是使用陣列的資料結構 在arraylist中初始化的長度是10,如果長度不夠用了,每次會增加之前長度的50 然後將舊的集合中的資料拷貝到新的集合中。vector每次擴容的長度是之前的一倍 陣列結構圖 為什麼查詢和修改快?查詢和修...

基礎資料結構之陣列與鍊錶(五)

本篇主要介紹一種重要的鍊錶 雙向鍊錶 doubly linked lists 雙向鍊錶,顧名思義,它既可以從head開始正向遍歷鍊錶,也可以從tail開始反向遍歷鍊錶。雙向鍊錶的節點包含兩個指標,乙個指向下乙個節點 successor,同單鏈表 另乙個指向前乙個節點 predecessor 因此,也...

集合框架 資料結構之陣列和鍊錶

如圖 資料結構之陣列和鍊錶 總結 list 面試題list的子類特點 arraylist 底層資料結構是陣列,查詢快,增刪慢。執行緒不安全,效率高。vector 底層資料結構是陣列,查詢快,增刪慢。執行緒安全,效率低。linkedlist 底層資料結構是鍊錶,查詢慢,增刪快。執行緒不安全,效率高。l...