雜湊表中的每個位置稱為桶(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...