线性探测法的查找函数
来源:互联网 发布:js input file value 编辑:程序博客网 时间:2024/06/07 03:12
试实现线性探测法的查找函数。
函数接口定义:
Position Find( HashTable H, ElementType Key );
其中HashTable
是开放地址散列表,定义如下:
#define MAXTABLESIZE 100000 /* 允许开辟的最大散列表长度 */typedef int ElementType; /* 关键词类型用整型 */typedef int Index; /* 散列地址类型 */typedef Index Position; /* 数据所在位置与散列地址是同一类型 *//* 散列单元状态类型,分别对应:有合法元素、空单元、有已删除元素 */typedef enum { Legitimate, Empty, Deleted } EntryType;typedef struct HashEntry Cell; /* 散列表单元类型 */struct HashEntry{ ElementType Data; /* 存放元素 */ EntryType Info; /* 单元状态 */};typedef struct TblNode *HashTable; /* 散列表类型 */struct TblNode { /* 散列表结点定义 */ int TableSize; /* 表的最大长度 */ Cell *Cells; /* 存放散列单元数据的数组 */};
函数Find
应根据裁判定义的散列函数Hash( Key, H->TableSize )
从散列表H
中查到Key
的位置并返回。如果Key
不存在,则返回线性探测法找到的第一个空单元的位置;若没有空单元,则返回ERROR
。
裁判测试程序样例:
#include <stdio.h>#define MAXTABLESIZE 100000 /* 允许开辟的最大散列表长度 */typedef int ElementType; /* 关键词类型用整型 */typedef int Index; /* 散列地址类型 */typedef Index Position; /* 数据所在位置与散列地址是同一类型 *//* 散列单元状态类型,分别对应:有合法元素、空单元、有已删除元素 */typedef enum { Legitimate, Empty, Deleted } EntryType;typedef struct HashEntry Cell; /* 散列表单元类型 */struct HashEntry{ ElementType Data; /* 存放元素 */ EntryType Info; /* 单元状态 */};typedef struct TblNode *HashTable; /* 散列表类型 */struct TblNode { /* 散列表结点定义 */ int TableSize; /* 表的最大长度 */ Cell *Cells; /* 存放散列单元数据的数组 */};HashTable BuildTable(); /* 裁判实现,细节不表 */Position Hash( ElementType Key, int TableSize ){ return (Key % TableSize);}#define ERROR -1Position Find( HashTable H, ElementType Key );int main(){ HashTable H; ElementType Key; Position P; H = BuildTable(); scanf("%d", &Key); P = Find(H, Key); if (P==ERROR) printf("ERROR: %d is not found and the table is full.\n", Key); else if (H->Cells[P].Info == Legitimate) printf("%d is at position %d.\n", Key, P); else printf("%d is not found. Position %d is returned.\n", Key, P); return 0;}/* 你的代码将被嵌在这里 */
输入样例1:(注:-1表示该位置为空。下同。)
1111 88 21 -1 -1 5 16 7 6 38 1038
输出样例1:
38 is at position 9.
输入样例2:
1111 88 21 -1 -1 5 16 7 6 38 1041
输出样例2:
41 is not found. Position 3 is returned.
输入样例3:
1111 88 21 3 14 5 16 7 6 38 1041
输出样例3:
ERROR: 41 is not found and the table is full.
解题思路:用线性探测法建表,就是将散列表假想成一个循环表,发生冲突时,从冲突地址的下一单元顺序寻找空单元,如果到最后一个位置也没有找到空单元,则回到表头开始继续查找,直到找到一个空位,就把此元素放进此空位中,如果找不到空位,则说明散列表已满,需要进行溢出处理。明确哈希表的创建过程,那么再解决这题,就好办了。话不多说,直接上代码:
Position Find( HashTable H, ElementType Key ){ int ho; Cell p; int i; for(i=0;i<H->TableSize;i++) { ho=Key+i; p=H->Cells[ho%H->TableSize]; if(p.Info==Empty||p.Data==Key) Hash(ho,TableSize); } return ERROR;}
阅读全文
0 0
- 线性探测法的查找函数
- 线性探测法的查找函数
- 线性探测法的查找函数
- 6-4 线性探测法的查找函数
- 6-4 线性探测法的查找函数(哈希表)
- 线性探测-Hash表的创建-查找
- 哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
- 哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
- 哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
- 哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
- 哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度
- 链地址法和线性探测法求查找成功与不成功的平均查找长度ASL
- 基于线性探测法的散列表
- 哈希表的构造之线性探测法
- 哈希表---线性探测法
- 线性探测法hash
- 【除留余数法定义hash函数+线性探测法解决hash冲突】数据结构实验之查找七:线性之哈希表
- 数据结构实验之查找七:线性之哈希表(线性探测解决哈希表的冲突)
- 中兴跳楼程序员妻子:他们就这样把我老公逼死了
- 熵、图像熵的意义及计算方法
- gulp学习笔记
- django session
- 贝尔宾团队角色理论及实践
- 线性探测法的查找函数
- Android 运行时权限
- eclipse 快捷键
- gitlab+docker+jenkins+maven+tomcat持续集成
- POJ 3984 迷宫问题
- js时间
- 数组
- oracle归档日志满了处理方式
- 线性回归算法学习