本文章主要讲诉了利用 C 语言来实现哈希表的增、删、改、查以及求平均查找长度的基本操作,针对的数据为英语单词,并且采用线性探测法来处理遇到的冲突问题。具体的内容可查看本文章,欢迎广大朋友们前来学习和指教。如果有需要源代码的朋友们可点击博主的主页资源页面进行下载。
一、基本思想
1.构造思想
通过输入单词信息,然后通过计算出每一个字母所对应的ASCII码来确定单词的关键字,然后在通过给定值k,求出关键字与给定值的余数来确定单词所存储的哈希地址,若产生冲突,则采用线性探测法来处理冲突,直至该关键字寻找到下一个哈希地址为止,从而构造出哈希表
2.设计思想
(1)通过计算单词的 ASCII 码作为哈希关键字,然后再通过采用除数余留法构造哈希表,根据 H(key) = key MOD p,p<=m 的哈希函数映像关系.求出哈希地址用以存放哈希关键字。
(2)哈希函数可以减少冲突,但不能避免。采用线性探测法来处理哈希关键字相同而产生的冲突,为产生冲突的哈希关键字寻求下一个可以存放哈希关键字以及相关信息的哈希地址。
(3)在插入单词时对单词的 ASCII 码值进行计算,通过进行判断该哈希关键字是否产生冲突,如若产生冲突,则为该关键字寻求下一个哈希地址用以存放哈希关键字,若不产生冲突,则插入其中。在计算哈希表的平均查找长度时,定义全局变量用以保存哈西关键字的个数,通过计算求出哈希表的平均查找长度。
二、功能介绍
1.构造哈希表
采用除留余数法构造哈希表,输入你想要输入的单词数目(p<哈希表的长度)进入哈希表的存储结构中,并且通过算法保存输入的单词信息,为后面的基本操作提供基础。
2.显示哈希表
通过编写哈希算法,使保存到存储结构里面的单词信息,以及处理冲突时为该哈希关键字寻求下一个哈希地址的搜索次数,以及存放的空间,和它的哈希关键字一并显示出来。
3.查找哈希表
通过输入你需要查找的单词信息,在哈希表中进行查找,如若在该哈希表中存在该哈希关键字信息,则输出这个哈希关键字的基本信息以及与该哈希关键字发生冲突的哈希信息。若不存在,则提示该哈希关键字不存在。
4.删除哈希表
通过输入你需要删除的单词信息,在哈希表中进行查找,如若在该哈希表中存在该哈希关键字信息,。并且对该哈希关键字进行判断是否删除,若输入y,则删除该哈希关键字以及基本信息,若输入n,则取消删除该哈希关键字。
5.插入哈希表
通过输入你需要插入的单词信息,在哈希表中进行查找,如若在该哈希表中存在该哈希关键字信息,则输出这个哈希关键字的基本信息以及与该哈希关键字发生冲突的哈希信息,并提示该单词存在,无需插入。若不存在该哈希关键字,则插入该哈希关键字。
6.平均查找长度
平均查找长度包含查找成功的平均查找长度和查找失败的平均查找长度,这里主要是利用计算公式计算出成功查找到单词的平均查找长度,求查找失败的平均查找长度类似,只需修改其对应的计算功能即可。
三、功能流程图
四、函数构造模块
1.数据存储结构
采用结构体数组作为存储结构来存放哈希表的相关信息。
#define hash_len 15
#define M 10
#define Max 10
#define NULLKEY " "
typedef int Status;
typedef struct
{
char word[Max];//单词数
int number;//计数关键字
}Word;
typedef struct
{
char *word;
int number;//关键字//单词
int numofseek;//搜索次数
}HASH;
//结构体数组
int number=0;//全局变量
Word wordlist[hash_len];//存放单词信息
HASH hashlist[hash_len];//存放操作的信息
2.函数功能模块
Status InitwordList(int n);//初始化单词
Status CreatewordList(int n);//创建关键字
Status print_hash();//显示信息
Status average_hash();//求平均查找长度
Status find_hash();//查询信息
Status delete_hash();//删除信息
Status insert_hash();//插入信息
五、运行结果
1.菜单选择项
2.构造哈希表
3.显示哈希表
4.查找哈希表
5.删除哈希表
6.插入哈希表
7.平均查找长度
非常感谢广大朋友们的查看,如果对本篇文章有任何问题或者有什么不足之处,还请广大朋友们的不吝赐教。如果有喜欢本篇文章的朋友们还请给博主一个一键三连吧。