直擊資訊的本質 鍊錶

2021-10-06 23:40:48 字數 2161 閱讀 7490

資料基本操作

後語傳送門

鍊錶指多個不連續的最小儲存單元所構成的集合。鍊錶會記錄起始最小儲存單元的下標(start)與結束最小儲存單元的下標(end)。鍊錶解決了陣列的增刪缺陷,同時能提高總空間利用率,但同時也帶來了查詢開銷的增大的問題。

下圖中w,q,e為陣列、e為鍊錶。

鍊錶實際上是通過記錄元素之間的關係來完成整個資料結構的搭建。

list 為雙向鍊錶資料結構,listdata為資料「鏈」,其中有操作函式removelistdata刪除乙個「鏈」,insertlistdata在乙個「鏈」後插入乙個「鏈」,findindexlistdata根據下標查詢「鏈」,push往後面增加乙個元素。

listdata

list

insertlistdata

(listdata,data)

findindexlistdata

(index)

return fordata;

}push

(data)

}

例:

如上圖,要在「鏈」8的位置插入乙個「鏈」,只需要改變「鏈」8的next, 和「鏈」10的previous,與「鏈」9的next,previous 即可完成插入。

即已知插入位置「鏈」i,與插入「鏈」k,那麼i.next.previous=k; k.next = i.next; i.next = k ; k.previous = i, 即可完成新增操作,所以鍊錶在任意位置增加插入乙個「鏈」,開銷為o(1)。

例:

如上圖,要刪除「鏈」8的,只需要改變「鏈」6的next, 和「鏈」10的previous 即可完成刪除。

已知刪除位置「鏈」 i,那麼i.next.previous = i.previous ; i.previous.next =i.next 即可完成刪除操作,所以鍊錶刪除任意位置的「鏈」,開銷為o(1)。

例子:

如上圖,已知第乙個「鏈」、start的下標為12,第三個「鏈」的下標,無法直接計算得到,需要遍歷前兩個「鏈」

在鍊錶中,已知start「鏈」的下標,無法直接計算得到第n個「鏈」的下標,需要遍歷1 - n之間的所有「鏈」,所以查詢第n個「鏈」需要進行n次迴圈,則開銷為o(n)。

改變乙個「鏈」時需要先查詢,修改的成本為o(1),則總成本為o(1)+o(查) ,所以修改乙個「鏈」的開銷和查詢效能相當。

1.鍊錶本質和陣列的區別,乙個是連續,乙個是不連續的最小儲存單元集合,在陣列上通過連續這個資訊,來規定了最小儲存單元之間的關係,可以直接通過偏移值算出儲存位置,同時因為要保持連續,所以陣列的增刪開銷較大。鍊錶使用next和previous記錄了最小儲存單元之間的關係,可以直接刪除或新增,同時因為這種是記錄資訊,需要處理這個資訊,所以鍊錶的查開銷較大。

2.陣列這種資料結構的資訊,實際上是已知獲取,每個最小儲存單元之間的關係都是確定的,且可直接計算的(運算過程無需別的最小儲存單元參與)。

3.鍊錶這種資料結構的資訊,實際上是 計算獲取,每個最小儲存單元之間的關係,必須通過迴圈計算才能得到(運算過程中需要別的最小儲存單元參與)。

4.在效能總結中,總會說道乙個概念,即空間換時間,為什麼鍊錶使用了更多的空間,卻換來了更差的效能。因為鍊錶中記錄的資訊它是乙個中間資訊,並不是乙個結果資訊(無法直接推測其餘「鏈」與當前「鏈」的關係),需要結果時,還需要進行關聯計算,且這個關聯的資訊究竟有多少也是未知的(在鍊錶中已知乙個「鏈」要獲取相對於這個「鏈」的第三個「鏈」,需要遍歷前兩個「鏈」才能拿到第三個「鏈」的位址),且鍊錶的建立是在破壞陣列的已知條件的基礎上進行的。

陣列、排序總結

直擊資訊的本質 計數排序

前言 計數排序,顧名思義它是統計每個元素出現的次數。實際上是通過限定了資訊的範圍,在只適用於整數情況下達到了線性時間效能。整數集合在已知範圍的情況下,整數的個數是有限的,實際上限定資料為整數,是把問題從無限多種情況,變成了有限種情況 演算法原理 1.先計算資料中的最大值max最小值min。找出資料範...

直擊資訊的本質 桶排序

前言 桶排序在某種意義上來講它並不是乙個排序演算法,它更像乙個策略方案,事實上的排序還是由別的排序演算法完成,它的步驟分為兩部分 1 資料裝 桶 2 每個 桶 使用其餘的排序演算法進行排序。計數排序實際上是桶排序的特例情況,桶排序代表的是一般情況,資料結構字典的實現思想和桶排序的實現思想一致。演算法...

直擊資訊的本質 陣列

後語傳送門 陣列指多個連續的最小儲存單元所構成的集合,且每個單元只可被乙個陣列使用。陣列會記錄起始最小儲存單元的下標 start 與陣列長度 len 在計算機系統中,可以把記憶體看做乙個超大的陣列 實際上陣列是由,最小儲存單元這個概念規定自然產生的一種資料結構,即多個連續的最小儲存單元稱之為陣列。實...