6-22 线性探测法的查找函数 (20 分)

试实现线性探测法的查找函数。

函数接口定义:

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 -1
Position 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);elseprintf("%d is not found.  Position %d is returned.\n", Key, P);return 0;
}/* 你的代码将被嵌在这里 */

输入样例1:(注:-1表示该位置为空。下同。)

11
11 88 21 -1 -1 5 16 7 6 38 10
38
输出样例1:

38 is at position 9.
输入样例2:

11
11 88 21 -1 -1 5 16 7 6 38 10
41
输出样例2:

41 is not found. Position 3 is returned.
输入样例3:

11
11 88 21 3 14 5 16 7 6 38 10
41
输出样例3:

ERROR: 41 is not found and the table is full.

Position Find( HashTable H, ElementType Key ){Position p0,p;int Cnum=0;//冲突数p=p0=Hash(Key,H->TableSize);while(H->Cells[p].Info!=Empty&&H->Cells[p].Data!=Key){Cnum++;if(Cnum==MAXTABLESIZE){return ERROR;}p=(p0+Cnum)%H->TableSize;       }return p;
}

线性探测法的查找函数 (20 分)相关推荐

  1. 线性探测法的查找函数

    线性探测法:如遇到了冲突,用pos+i(i=1,2,3-)的方式来找到新的未用过的位置. 查找时,如果没有,我们的结束条件就时i>=表的长度. 这样缺点也很突出,就是很多元素会扎堆的出现,降低了 ...

  2. 7-1 查找书籍 (20 分)给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。输入格式:输入第一行给出正整数n(<10),随后给出n本书的信息

    7-1 查找书籍 (20 分) 给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价. 输入格式: 输入第一行给出正整数n(<10),随后给出n本书的信息.每本 ...

  3. 7-7-1 查找书籍 (20 分)

    7-7-1 查找书籍 (20 分) 给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价. 输入格式: 输入第一行给出正整数n(<10),随后给出n本书的信息. ...

  4. 6-4 jmu-Java-m06 根据姓名以及电话号码查找联系人 (20分)

    6-4 jmu-Java-m06 根据姓名以及电话号码查找联系人 (20分) 该程序包含: Person类 : 属性:int id, String name, String phoneNumber,S ...

  5. 习题9-4 查找书籍 (20分)PTA给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价。

    给定n本书的名称和定价,本题要求编写程序,查找并输出其中定价最高和最低的书的名称和定价. 输入格式:输入第一行给出正整数n(<10),随后给出n本书的信息.每本书在一行中给出书名,即长度不超过3 ...

  6. 实验11-1-8 查找子串 (20分)

    本题要求实现一个字符串查找的简单函数. 函数接口定义: char *search( char *s, char *t ); 函数search在字符串s中查找子串t,返回子串t在s中的首地址.若未找到, ...

  7. 6-23 分离链接法的删除操作函数 (20 分)

    试实现分离链接法的删除操作函数. 函数接口定义: bool Delete( HashTable H, ElementType Key ); 其中HashTable是分离链接散列表,定义如下: type ...

  8. 【数据结构】哈希表——线性探测法、链地址法、查找成功、查找不成功的平均长度

    一.哈希表 1.概念 哈希表(Hash Table)也叫散列表,是根据关键码值(Key Value)而直接进行访问的数据结构.它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度.这个 ...

  9. 【除留余数法定义hash函数+线性探测法解决hash冲突】数据结构实验之查找七:线性之哈希表

    Think: 1知识点:除留余数法定义hash函数+线性探测法解决hash冲突 数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB P ...

最新文章

  1. 活动报名 | “认知神经科学”助力人工智能突围的方法路径
  2. FreeSWITCH在呼叫失败的情况下如何播放语音提示
  3. IT创业迷魂圈:不要画饼充饥
  4. nginx各个版本下载地址
  5. 剑桥少儿英语预备级教案(上) unit8 How many doors?
  6. CVPR 2019 | APDrawingGAN:人脸秒变艺术肖像画
  7. 删除排序链表中的重复元素Python解法
  8. Profibus-DP光端机产品功能特点及技术参数详解
  9. 广州python平均薪资_11 月全国程序员平均工资出炉,看看的你得薪资跟上平均水平了吗。...
  10. 无法读取内存属于错误吗_索佳全站仪错误信息讲解
  11. localStorage存储数组以及取数组方法。
  12. harbor 多端口_Harbor使用 -- 修改80端口
  13. systemtap的一些总结
  14. 录音文件怎么转换成文字呢?
  15. 显卡4k性能测试软件,碰上UHD都得跪 AN新一代显卡4K对比横评
  16. 渗透工具-masscan
  17. Kconfig使用详解
  18. matlab积分器的工作原理,[转载]Simulink积分器详解(图)
  19. UML 基本模型元素
  20. 地理信息系统(Geographic Information System或 Geo-Information system,GIS)

热门文章

  1. rebar3使用介绍(七)测试
  2. S3C6410开发(1)-初步入门
  3. 运营商大数据产业链迎机遇
  4. 【题解】【AcWing】1579. 插入还是归并
  5. 使用PL2303给stm32下载程序
  6. 关于大数据中的NOSQL
  7. 项目管理-PMP-第7章 项目质量管理
  8. 微信小程序pages界面设置(以mypage界面为例)
  9. CSS3眨眼效果(animation动画循环间的“暂停”、“延时”执行)
  10. ZW20-12/630-25