<强> c++实现哈希表的实例强>
该散列表的散列函数采用了除法散列函数,乘法散列函数,全域散列函数,每一个槽都是使用有序单向链表实现。
<>强实现代码:强>
LinkNode。h
# include使用名称空间性病; 类链接; 类LinkNode { 私人: int的关键; LinkNode *下; 朋友联系; 公众: LinkNode():关键(1)、下(NULL) {} LinkNode (int num):关键(num)、下(NULL) {} int Getkey () { 返回键; } }; >之前 ,链接。h
# include“LinkNode.h” 类散列; 类的链接 { 私人: 朋友散列; LinkNode *头; int长度; 公众: 链接():头(NULL),长度(0) {} 链接(LinkNode *节点):头(节点) { 长度+=1; } ~链接() { MakeEmpty (); } 空白MakeEmpty () { 如果(头==NULL) 返回; LinkNode * p=头; 而(p) { 头=头→下; 删除p; p=头; } } int GetLength () { 返回长度; } 插入空白(int num) { 长度+ +; LinkNode * p=new LinkNode (num); 如果(头==NULL) { 头=p; 返回; } LinkNode * q=头,* t=头→下; 如果(q→key> num) { 头=p; 头→下=问; 返回; } 而(t) { 如果(t→key>=num) { 问:接下来,=p; 未来=t p→; 返回; } 其他的 { q=t; t=t→下; } } 问:接下来,=p; } bool删除(int num) { 如果(头==NULL) { cout<& lt;“链接为空!”& lt; & lt; endl; 返回0; } LinkNode * p=头,* t=头→下; 如果(p→键==num) { 头=头→下; 删除p; 长度,; 返回1; } 而(t) { 如果(t→键==num) { 下=t p→→下; 删除t; 长度,; 返回1; } else if (t→key之前 ,散列。h
哈希表中每一个元素存储一个链表
# include“Link.h” 类散列 { 私人: 链接*表; 公众: 散列(int num):表(新链接(num)) {} ~ Hash () { 删除表[]; }//除法散列法 num int H1 (int, int) { 返回num % m; }//乘法散列法 int H2 (int num,浮动,int m) { num浮动fnum=(浮动); 浮动re=((fnum *) - (int) (fnum *)) * m; 返回(int)再保险; }//全域散列 num int H3 (int, int, int) { int a、b;=rand () % p; b=rand () % p; 返回((a * num + b) % p) % m; } 插入空白(全国矿工工会int, int n) { int的关键; 如果(n==1) { 关键=H1 (num, 17); } else if (n==2) { 关键=H2 (num, 0.618033, 17); } 其他的 { 关键=H3 (num, 701, 17); } 表(例子).Insert (num); } bool删除(全国矿工工会int, int n) { int的关键; 如果(n==1) { 关键=H1 (num, 17); } else if (n==2) { 关键=H2 (num, 0.618033, 17); } 其他的 { 关键=H3 (num, 701, 17); } 返回表(例子)delete (num); } int搜索(全国矿工工会int, int n) { int的关键; 如果(n==1) { 关键=H1 (num, 17); } else if (n==2) { 关键=H2 (num, 0.618033, 17); } 其他的 { 关键=H3 (num, 701, 17); } 如果(表(例子).Search (num) !=0) { 返回键+ 1; } 其他的 返回1; } 空白打印(int num) { int我; (i=0; i< num;我+ +) { 如果(表[我].IsEmpty ()) 继续; 表[我].Print(我); } } };c++实现哈希表的实例