鏈位址法處理Hash衝突

2021-09-30 15:38:06 字數 1635 閱讀 1290

雜湊表中的每個位置稱為桶(bucket),當發生雜湊衝突時就以鍊錶形式存放多個元素。

[img]

鏈位址法處理hash衝突,看看下面**,模擬了jdk中的hashset:

class node; 

public object getvalue()

public node getnext()

public void setnext(node next)

} public class myhashset

public int size()

private static int hash (object o)

private int indexfor(int hashcode)

public void add(object value) else

if (!node.getvalue().equals(value))

} }

public boolean contains(object value)//橫向查詢

if (node!=null && node.getvalue().equals(value)) else

} public boolean remove(object value)

node lastnode = null;

while (node!=null && !node.getvalue().equals(value))

if (node!=null && node.getvalue().equals(value)) else

} public object getall()

} return values;

} public static void main(string args) ;

for (int i = 0; i < values.length; i++)

set.remove("mary");

system.out.println("size="+set.size());

values = set.getall();

for (int i = 0; i < values.length; i++)

system.out.println(set.contains("jack"));

system.out.println(set.contains("linda"));

system.out.println(set.contains("jane"));

} }

結果:index:4 value:tom

index:1 value:mike

index:1 value:mike

index:5 value:jack

index:5 value:mary

index:0 value:linda

index:0 value:rose

index:0 value:jone

size=6

linda

rose

jone

mike

tomjack

true

true

false

雜湊(hash)表 鏈位址法解決衝突

首先要感謝下面博主 mark 一下 說的很清楚,也能直接用,只是做了一點點小改進 將衝突的hash值存放到了鏈尾 增加了remove函式,方便刪除不要的節點 此方法中,乙個key至只對應乙個value lookup函式 定義乙個查詢根據key查詢結點的方法,首先是用hash函式計算頭位址,然後根據頭...

hash衝突處理

1 衝突是如何產生的?上文中談到,雜湊函式是指如何對關鍵字進行編址的規則,這裡的關鍵字的範圍很廣,可視為無限集,如何保證無限集的原資料在編址的時候不會出現重複呢?規則本身無法實現這個目的。舉乙個例子,仍然用班級同學做比喻,現有如下同學資料 張三,李四,王五,趙剛,吳露.假如我們編址規則為取姓氏中姓的...

hash表之拉鍊法處理衝突

define arrlen 17 define namelen 20 define addrlen 20 typedef struct rec rec hash函式,線性定址法和餘數法結合。得到的位址為陣列的下標。count為hash表長,即模。int hash char name,int coun...