散列表(哈希表)

散列表是一种数据结构,通过哈希函数将关键字映射到存储位置,实现快速查找。文章介绍了散列冲突的概念及其对性能的影响,讨论了散列函数的均匀性、冲突解决方法和填装因子对散列表性能的决定作用。
摘要由CSDN通过智能技术生成

基本定义

散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系 f,使得每个关键字key对应一个存储位置f(key)。这种对应关系f称为散列或哈希函数。采用上述思想将数据存储在一块连续的存储空间中,这块连续的存储空间称为散列或哈希表。关键字对应的存储位置称为散列地址。散列技术最适合的求解问题是查找与给定值相等的记录。
如果碰到两个不同的关键字key1≠key2key1≠key2,但却有相同的f(key1)=f(key2)f(key1)=f(key2),这种现象称为冲突,并把key1key1和key2key2 称为这个散列函数的同义词(synonym)。
 

散列函数:一个查找表中的关键字映射成该关键字对应的地址的函数,记为Hash(key) = Addr(这里的地址可以是数组下标、索引或内存地址等。)

散列表:根据关键字而直接进行访问的数据结构。简单来说,散列表建立了关键字和存储地址之间的一种直接映射关系。

创建开放定地法的散列表:

#define MAXTABLESIZE 100000 /* 允许开辟的最大散列表长度 */
typedef int ElementType;    /* 关键词类型用整型 */
typedef int Index;          /* 散列地址类型 */
typedef Index Position;     /* 数据所在位置与散列地址是同一类型 */
/* 散列单元状态类型,分别对应:有合法元素、空单元、有已删除元素 */
typedef enum { Legitimate, Empty, Deleted } EntryType;

typedef struct HashEntry Cell; /* 散列表单元类型 */
s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值