線性表 & 散列表


線性表:

  數據排成一條線一樣的機構,每個線性表上的數據最多只有前后兩個方向,

  包括 數組,鏈表,隊列,棧。

 

 

 

非線性表 :

  數據之間並不是簡單的前后關系,有二叉樹、圖等。

 

 

 

 

散列表基於 數組支持按照下標訪問數據的特性,是數組的一種擴展)

  通過散列函數把元素的鍵值 映射為 下標,然后將數據存儲在數組中對應下標的位置。

  當按照鍵值查詢元素時時,用同樣的散列函數,將鍵值轉化數組下表,從對應的數組下表的位置取數據。

 

散列表源於數組,他借助散列函數對數組這種數據結構進行擴展,利用的是數組支持 按照下標

隨機訪問元素的特性,散列表的兩個核心問題是 散列函數設計和散列函數沖突

散列表僅支持 添加 、查、 刪 不支持修改。

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

 

解決散列沖突的方法

1 開放尋址法

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

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

線性探測:存儲位置被占用,從當前位置向后查找,有空位置就插入。

   缺點 :如果數據越來越多,耗費的時間就越來越多

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

雙重探測:用一組散列函數,如果第一個散列函數計算的位置被占了,就用第二個散列函數計算。

 

2 鏈表法

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

插入的時候只需要通過計算散列函數計算出對應的散列槽位,將其插入到對應鏈表中即可。

當查找、刪除一個元素時,同樣通過散列函數計算出對應的槽,然后遍歷鏈表查找或者刪除。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM