哈希——开放定址法

这篇博客探讨了哈希冲突的原因,强调了哈希函数设计的重要性,并详细介绍了开放定址法作为解决冲突的策略。文章通过定义结构体、哈希函数以及扩容函数来阐述如何使用开放定址法进行哈希表的插入、查找和删除操作,并提供了测试用例。
摘要由CSDN通过智能技术生成

哈希函数:

影响哈希冲突的原因:

引起哈希冲突的一个原因可能是:哈希函数设计不够合理。   
哈希函数设计原则:
哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0到m-1之间 
哈希函数计算出来的地址能均匀分布在整个空间中 

哈希函数应该比较简单

解决哈希冲突两种常见的方法是:闭散列和开散列

闭散列

闭散列:也叫开放地址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表中必然还有空位置,那么可以把key存放到表中 “下一个” 空位中去  

首先定义结构体

typedef int Keytype;
typedef int Valtype;
enum Status//定义状态
{
	EM,//空
	EX,//存在
	DL,//删除
};
typedef struct HashNode
{
	Keytype _key;
	Valtype _val;
	Status _status;
}HashNode;
typedef struct Hashtable
{
	HashNode *_table;
	size_t _size;
	size_t _N;
}Hashtable;

扩容用到的函数与定义哈希坐标,初始化函数:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值