陣列
陣列(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...