雜湊表是一種資料結構,提供快速的插入和查詢功能。雜湊表基於陣列儲存資料,因此能在o(1)時間內定位資料。關鍵字值通過雜湊函式對映為陣列下標。缺點就是陣列建立後容量固定,如果資料較多需要不斷擴充套件其長度。
如何將關鍵字轉換為陣列下標?這個操作是通過雜湊函式完成的。比如,下面就是乙個簡單的雜湊函式,
int hash(int key)
有時候,有些雜湊函式對於不同的鍵值可能會生成相同的雜湊碼值。所以需要解決衝突問題,下面有兩種方法:
1.開放位址法:通過在雜湊表中再找乙個空位來解決此問題。
此法又分為三種方法:
1)線性探測,即上面使用的這種方法,雜湊函式將關鍵字範圍壓縮到陣列的範圍,對陣列長度取餘即可,+1,+2,+3…以此類推進行取餘。
2)二次探測的過程是這樣,+1,+2,+4,+9…以此類推。
3)再雜湊,用不同的雜湊函式對關鍵字再做一次雜湊化。
2.鏈位址法:在雜湊表每個單元中設定鍊錶。某個資料項的關鍵值仍然對映到雜湊表的單元中,而資料項本身插入這個單元的鍊錶中其他同樣對映到這個位置的資料項只需要加入到鍊錶中。
package test;
public class hashtable
//雜湊函式
public int hash(int key)
//插入,這裡假設是陣列未滿,即不能插入大於arraysize的資料數
public void insert(item item)
hasharray[hashcode] = item;
}//刪除
public item delete(int key)
++hashcode;
hashcode %= arraysize;
}return null;
}//查詢
public item find(int key)
return null;
}//列出全部資料
public void show()
}public static void main(string args)
}//定義雜湊表中存放的資料型別,可以為任意的型別
class item
public int getkey()
}
資料結構之雜湊表的實現
之前研究stl原始碼的時候發現雜湊table底層是實現看起來實現的非常的簡潔,覺得自己去寫乙個雜湊表肯定也是很簡單的。但是,但是,但是我今天看了一下資料結構裡面的雜湊表的簡單實現,才發現其實也是有很多學問在裡面的,所以今天就打算自己實現一下,做乙個記錄,方便以後自己來檢視學習。因為雜湊表是會產生雜湊...
資料結構之雜湊表(雜湊表)
今天學的是資料結構的雜湊查詢篇,其他的查詢可參見以前的傳送門 以前的查詢都是基於比較關鍵字的基礎上,所以查詢的效率依賴於查詢過程中所進行的比較次數。理想的情況是不經過任何比較,通過計算就能直接得到記錄所在的儲存位址,雜湊查詢 hashed search 是基於上述思想的一種查詢方式。雜湊法又稱為雜湊...
資料結構之雜湊表
雜湊表和雜湊化有乙個重要的概念是如何把關鍵字轉換成陣列下標,在雜湊表中這個轉換是通過雜湊函式來完成的。比如規定乙個單詞含有4個字元,對於單詞cats,我們採用 冪的連乘 的方式將乙個單詞對映成數字。因為有27個可能的字元,包括空格,所以冪採用27,則cats的數字下標是3 27 3 1 27 2 2...