数据结构——哈希表的生成
来源:互联网 发布:美工刀片哪个牌子好用 编辑:程序博客网 时间:2024/06/15 15:19
目的: 掌握哈希存储结构的思想,能选择合适的哈希函数,实现不同冲突处理方法的哈希表的查找、建立。
内容:
(1)设计哈希函数及处理冲突的方法;
(2)键盘输入数据,利用设计的哈希函数及线性探测法生成哈希表;
(3)用同样的输入数据和哈希函数,用链地址法处理冲突生成哈希表;
(4)在主函数中设计一个简单的菜单,分别调试上述算法;
(5)分析两种方法的平均查找长度。
借鉴大牛博客:
http://blog.csdn.net/xyzbaihaiping/article/details/51607770
http://blog.csdn.net/wangran51/article/details/8826633/
http://blog.csdn.net/u011080472/article/details/51177412
代码(已由codeblocks编译通过):
#include<bits/stdc++.h>#define N 1009using namespace std;void menu(){ printf("\t\t\t1.闭散列法\n"); printf("\t\t\t2.开链法(哈希桶)\n"); printf("\t\t\t3.退出\n");}void fun1(){ printf("请输入n, p:\n"); int i, n, *a, *b, p; //double k; scanf("%d%d", &n, &p); //L = (int)(1.0*n / k); a = (int*)malloc((n+9) * sizeof(int)); b = (int*)malloc((p+9) * sizeof(int)); printf("然后输入n个数:\n"); for(i = 1; i <= n; i++) scanf("%d", &a[i]); int sum = 0; for(i = 0; i <= p; i++) b[i] = -1; for(i = 1; i <= n; i++) { int key = a[i] % p, num = 1; while(b[key] != -1) num++, key = (key + 1) % p; sum += num; b[key] = a[i]; } printf("散列表\n"); for(i = 0; i < p; i++) printf("%d%c", b[i], (i == p - 1) ? '\n' : ' '); printf("平均查找长度(成功)\n"); if(sum % n == 0) printf("%d\n", sum / n); else { int g = __gcd(sum, n); printf("%d/%d\n", sum/g, n/g); }}void fun2(){ printf("请输入n, p:\n"); int n, i, j, *a, ans[N], p; ans[0] = 0; for(i = 1; i <= 100; i++) ans[i] = ans[i - 1] + i; scanf("%d%d", &n, &p); a = (int*)malloc((n+9) * sizeof(int)); vector<int> mp[n+9]; printf("然后输入n个数:\n"); for(i = 1; i <= n; i++) scanf("%d", &a[i]); int sum = 0; for(i = 1; i <= n; i++) { int key = a[i] % p; mp[key].push_back(a[i]); } printf("散列表\n"); for(i = 1; i <= n; i++) { int num = mp[i].size(); for(j = 0; j < num; j++) printf("%d%c", mp[i][j], (j == num-1) ? '\n' : ' '); sum += ans[num]; } printf("平均查找长度(成功)\n"); if(sum % n == 0) printf("%d\n", sum / n); else { int g = __gcd(sum, n); printf("%d/%d\n", sum/g, n/g); }}/*书上例子12 1319 14 23 01 68 20 84 27 55 11 10 79||12 1332 14 23 01 42 20 45 27 55 24 10 53*/int main(){ while(true) { int sel; menu(); scanf("%d", &sel); switch(sel) { case 1: fun1(); break; case 2: fun2(); break; } if(sel == 3) break; } return 0;}
阅读全文
0 0
- 数据结构——哈希表的生成
- 数据结构——邻接矩阵的最小生成树Kruskal算法
- 数据结构——邻接矩阵的最小生成Prim算法
- 数据结构——邻接矩阵的最小生成树Prim算法
- 数据结构例程——最小生成树的普里姆算法
- 数据结构——图 生成树
- 数据结构——最小生成树
- 数据结构——构造最小生成树
- 基于java的数据结构学习手记5——后缀表达式生成与计算
- 数据结构面试之九——图的常见操作3之最小生成树
- 数据结构例程——最小生成树的克鲁斯卡尔算法
- 【数据结构】求最小生成树的权值之和——Prim算法
- 数据结构:图——图的遍历、最小生成树、最短路径算法
- 《大话数据结构》最小生成树——Prim算法
- 《大话数据结构》最小生成树——Kruskal算法
- 数据结构_课程设计——最小生成树:室内布线
- 数据结构OJ作业——最小生成树
- 数据结构与算法-最小生成树—普里姆算法
- 金蝶EAS,代码调用编码规则,注意上下文及接口实例
- 丹尼尔·惠灵顿(Daniel Wellington)选择一洽的理由
- 样式表继承性、层叠性和优先级的浅析
- 检查性异常和运行时异常
- NSLog使用详解与性能分析
- 数据结构——哈希表的生成
- 环之最大和
- 33、丑数
- Python计算地图上两个点的距离
- sql-逻辑运算符-优先级
- struts2+AJAX实现无刷新进行验证。详细代码+知识点
- 设计模式之结构型-适配器模式(6)
- 读书感悟——白夜行
- PDF插件VintaSoftPDF.NET Plug-in v5.5发布,新增PDF验证功能