線性表 & 雜湊表

.未央發表於2020-06-09

線性表:

  資料排成一條線一樣的機構,每個線性表上的資料最多隻有前後兩個方向,

  包括 陣列,連結串列,佇列,棧。

 

 

 

非線性表 :

  資料之間並不是簡單的前後關係,有二叉樹、圖等。

 

 

 

 

雜湊表基於 陣列支援按照下標訪問資料的特性,是陣列的一種擴充套件)

  通過雜湊函式把元素的鍵值 對映為 下標,然後將資料儲存在陣列中對應下標的位置。

  當按照鍵值查詢元素時時,用同樣的雜湊函式,將鍵值轉化陣列下表,從對應的陣列下表的位置取資料。

 

雜湊表源於陣列,他藉助雜湊函式對陣列這種資料結構進行擴充套件,利用的是陣列支援 按照下標

隨機訪問元素的特性,雜湊表的兩個核心問題是 雜湊函式設計和雜湊函式衝突

雜湊表僅支援 新增 、查、 刪 不支援修改。

雜湊函式 可以定義為 hash(key),key表示元素的鍵值,hash(key)的值表示經過雜湊函式計算得到雜湊值。

 

解決雜湊衝突的方法

1 開放定址法

如果出現了雜湊衝突(就是經過計算完放入的table 有值的情況)就從這個table 往後 找到空位置,插入。

探測新的位置的方法有 線性探測二次探測雙重探測

線性探測:儲存位置被佔用,從當前位置向後查詢,有空位置就插入。

   缺點 :如果資料越來越多,耗費的時間就越來越多

二次探測:探測的步長變成了原來的"二次方"

雙重探測:用一組雜湊函式,如果第一個雜湊函式計算的位置被佔了,就用第二個雜湊函式計算。

 

2 連結串列法

雜湊表中,每個桶或槽 會對應一條鏈條,所有雜湊值相同的 元素 我們都放到相同槽位對應的連結串列中

插入的時候只需要通過計算雜湊函式計算出對應的雜湊槽位,將其插入到對應連結串列中即可。

當查詢、刪除一個元素時,同樣通過雜湊函式計算出對應的槽,然後遍歷連結串列查詢或者刪除。

 

相關文章