数据结构与算法-哈希表

本文深入探讨了哈希表的基本概念,解析了其作为快速访问数据结构的特点,包括顺序表加链表的典型实现方式。同时,文章详细介绍了哈希函数的作用及常见类型,如直接定址法、除留余数法等,并讨论了如何处理哈希冲突,例如使用链地址法和公共溢出区法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简述

哈希表也叫散列表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构。是把记录的存储位置和记录的关键字之间建立对应关系的一种存储结构。

二、特点

哈希表又叫 散列表,速度很快,最常用的一种存储机构是顺序表+链表的结构;主结构是顺序表,每个顺序表中的元素又对应一张链表。 

哈希表的常用数据结构如下图:

三、哈希表的操作

哈希表的插入、删除和查找等操作都会用到哈希函数,哈希函数的计算速度直接影响散列表的性能。

常用的哈希函数 包括 直接定址法、除留余数法、数字分析法、平方取中法、折叠法和随机数法等。

下面以除留余数法为例说明哈希表的常用操作:

1.添加数据

 先计算数据的哈希码(调用hashcode()方法),再计算在哈希表中的位置,最后存入哈希表。

2.查询数据

和添加数据的过程是相同的,先求hashcode,再根据hash值,找到存储地址,比如 找67 ,67% 11 =1 ,找到hash 值=1的存储位置,找到链表,依次找到23,34后面的就是67

3.哈希冲突

不同key值产生相同的地址,H(key1)=H(key2),就产生了哈希冲突,

解决hash冲突有以下几个常用的方法 :

1.开放定制法 
2.链地址法 (拉链法),这个比较常用的
3.公共溢出区法 
建立一个特殊存储空间,专门存放冲突的数据。此种方法适用于数据和冲突较少的情况。 
4.再散列法 
准备若干个hash函数,如果使用第一个hash函数发生了冲突,就使用第二个hash函数,第二个也冲突,使用第三个,以此类推

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值