線性表:
資料排成一條線一樣的機構,每個線性表上的資料最多隻有前後兩個方向,
包括 陣列,連結串列,佇列,棧。
非線性表 :
資料之間並不是簡單的前後關係,有二叉樹、圖等。
雜湊表(基於 陣列支援按照下標訪問資料的特性,是陣列的一種擴充套件)
通過雜湊函式把元素的鍵值 對映為 下標,然後將資料儲存在陣列中對應下標的位置。
當按照鍵值查詢元素時時,用同樣的雜湊函式,將鍵值轉化陣列下表,從對應的陣列下表的位置取資料。
雜湊表源於陣列,他藉助雜湊函式對陣列這種資料結構進行擴充套件,利用的是陣列支援 按照下標
隨機訪問元素的特性,雜湊表的兩個核心問題是 雜湊函式設計和雜湊函式衝突
雜湊表僅支援 新增 、查、 刪 不支援修改。
雜湊函式 可以定義為 hash(key),key表示元素的鍵值,hash(key)的值表示經過雜湊函式計算得到雜湊值。
解決雜湊衝突的方法
1 開放定址法
如果出現了雜湊衝突(就是經過計算完放入的table 有值的情況)就從這個table 往後 找到空位置,插入。
探測新的位置的方法有 線性探測、二次探測、雙重探測。
線性探測:儲存位置被佔用,從當前位置向後查詢,有空位置就插入。
缺點 :如果資料越來越多,耗費的時間就越來越多
二次探測:探測的步長變成了原來的"二次方"
雙重探測:用一組雜湊函式,如果第一個雜湊函式計算的位置被佔了,就用第二個雜湊函式計算。
2 連結串列法
雜湊表中,每個桶或槽 會對應一條鏈條,所有雜湊值相同的 元素 我們都放到相同槽位對應的連結串列中
插入的時候只需要通過計算雜湊函式計算出對應的雜湊槽位,將其插入到對應連結串列中即可。
當查詢、刪除一個元素時,同樣通過雜湊函式計算出對應的槽,然後遍歷連結串列查詢或者刪除。