八.数据结构——哈希表(1)

前面我们学习了许多的线性存储结构,像顺序表,链表,队列等等,现在我们要学习一种全新的离散存储结构------哈希表。

结构图:

原理:通过一个连续的内存空间+hash函数,实现数据的高效查找(O(1))

通过hash函数对数据进行计算,得到存储下标

要素:

1.hash函数:通过特定的算法,对要插入的数据进行计算,得到存储下标

2.hash桶:连续内存中的每一个位置,都称之为桶

3.hash冲突:可能存在多个不同的数据,经过hash计算后得到相同存储位置

设计原则:确定性,均匀性,抗碰撞性,高效性,适应性

常见的典型hash函数:直接定址,除留余数,折叠法,平方取中,多项式


hash冲突:

本质:由于局限性没有完美的哈希函数,任意算法都有可能针对不同的key计算出相同的hash值。

解决:

1.开散列:典型:链地址法

hash桶节点,存放的是链表头指针,链表节点中存放数据,当产生了hash冲突给链表中挂新节点即可。

优化:将链表替换为红黑树(高效查找数据结构)

2.闭散列:也叫开放寻址法(在原有空间的基础上重新找位置)

典型:线性探测法(冲突时挨着向后寻找新位置存放)

线性探测法在删除数据时,比较麻烦,不能直接针对数据进行删除,而是只能标记该位置的数据已被删除

因为需要考虑,可能会有其它该位置的hash冲突数据还存在其它位置

因此只能标记,该位置数据被删除了,而不能表示该位置没有数据


实现:

1.数据结构的定义:

1.桶节点结构:字典型hash表

数据域: key-用于计算hash值 val-实际存储的数据

这种key,val的映射结构,通常被称作为:键值对

指针域:链表执行关系维护

2.hash表结构:

1.hash桶:连续的内存空间,存放桶节点指针(本质就是指针数组)

2.hash表容量:

3.元素数量

4.hash函数

相关操作:初始化,销毁,新增,查找,删除,容量,判空

(代码实现在下一节)


这就是本节课的全部内容,感谢您的观看

相关推荐
二十七日秋5 小时前
算法刷题笔记「Day 1|四道 OJ 入门题里的深坑」
c语言·汇编·数据结构·c++·笔记·python·算法
小白起 v6 小时前
02-数组与链表
数据结构·链表
路灯上の马陈17 小时前
二叉树的定义与性质
数据结构·二叉树·树结构·1024程序员节
Bshaya_21 小时前
红黑树详解:概念、规则与插入实现
数据结构·红黑树·二叉搜索树·平衡树·插入逻辑
WBluuue21 小时前
数据结构与算法:分块(一):块状数组、块状链表
数据结构·c++·算法·链表
路灯上の马陈1 天前
数据结构-树
数据结构·1024程序员节
benjormin1 天前
Java数据结构 二叉搜索树
数据结构·算法
H.莓飛1 天前
【数据结构】排序总结与规模实测
linux·服务器·开发语言·数据结构·visual studio·1024程序员节
码少女1 天前
数据结构——B+树基础
数据结构·b树