資料結構 查詢 雜湊表的線性探測已經拉鍊法的查詢

2021-10-24 23:32:40 字數 1101 閱讀 5900

直接定址法(一般沒啥用,消耗空間太大了)

除留餘數法(一般來說是除以質數,因為質數只有本身和1才可除,這樣分布比較均勻,衝突率小)這種方法比較easy也比較常用

數字分析法(僅僅對那種資料量具有明顯區分特徵的才管用,並且要先知道有哪些數值,通常情況下資料是隨機分布的)

平方取中法(對關鍵碼平方後取中間幾位,因為平方後中間幾位比較均勻,不會堆積在一起導致雜湊後大量衝突,比如123*123=15129,我們可以選51也可以12)

摺疊法(當關鍵碼位數很多的情況下,我們可以用摺疊法,)比如把12345678分成123+456+78=***然後再對這個數進行雜湊分析.

開放定址法,(用開放定址法得到的雜湊表叫閉散表)

線性探測法   這裡對關鍵碼去摸後的值衝突的話放到下乙個空位置。很簡單不多講。直接將演算法

/*返回正數表示找到的位址

返回-1表示位找到而且位置全滿

返回-2表示j位置空缺,且已經把查詢數插入j位置

返回-3表示j位置有衝突下,已經探測到後面空缺位置且把j插入

*/int hashsearch(vector& v,int k)//k是要查詢的值,這裡假設所有值都是正數,所以初始化的時候v裡面全是-1.-1表示空

//設定起始位置,加入再次探測到這裡還沒有表示沒有這個數

int i=(j+1)%m;//這裡%m是防止j在雜湊表的最後導致溢位問題

//查詢多次

while(v[i]!=-1&&i!=j)

if(i==j)

return -1;//表示沒找到

else

}

其實就是單鏈表的查詢非常簡單

直接上**了

1 //首先解釋下這個函式的輸入,第乙個引數是頭結點的鍊錶,第二個引數是m是表長,第三是k表示查詢值

2 node* hashsearch(node* ht,int m,int k)

3 10 if(p->data==k)return p; //假如找到了就返回這個節點

11 else //沒找到就插入

12

19 }

資料結構 雜湊表的線性探測演算法

構造雜湊表常用的方法是 除留餘數法 取關鍵值被某個不大於雜湊表長m的數p除后的所得的餘數為雜湊位址。hashkey key p。直接定址法 取關鍵字的某個線性函式為雜湊位址hashkey key 或 hashkey a key ba b為常數。我在這裡主要使用一下除留餘數法hash key key ...

資料結構 閉雜湊處理雜湊衝突(線性探測)

那發生了雜湊衝突,我們該如何處理呢?有兩種方法 1.閉雜湊,如線性探測 2.開雜湊,例如 雜湊桶 這裡我們用閉雜湊的方式來解決雜湊衝突。那如何去找下乙個空餘的位置呢?線性探測法,拿我們上次的關鍵碼集合為例,雜湊表的大小為10,假設雜湊函式為hash key key 10 當再往表裡插入43時,發現了...

資料結構 雜湊表查詢(雜湊表)

對於查詢,有順序表直接遍歷,有折半查詢直到查詢成功。但是這都需要不斷的比較,每一次查詢都需要重新遍歷,所以當資料龐大時是非常耗時的。雜湊表是一種可以避免多次比較,直接通過關鍵字就可以得到要查詢的記錄記憶體儲存位置。例如就像是乙個函式,每乙個自變數都對應著乙個函式值,即 這屬於雜湊技術,不需要比較就可...