嵌入式第三十篇——数据结构——哈希表

一、哈希表的基本概念

哈希表(Hash Table)是一种通过哈希函数将键(Key)映射到存储位置的数据结构,支持高效的插入、删除和查找操作,平均时间复杂度为O(1)。核心组成部分包括:

  • 哈希函数:将键转换为数组索引。
  • 数组(桶):存储键值对的底层结构。
  • 冲突处理机制:解决不同键映射到同一索引的问题。

二、哈希函数的设计

理想的哈希函数应满足:

  • 均匀性:键应均匀分布在数组中,减少冲突。
  • 确定性:同一键始终映射到同一索引。
  • 高效性:计算速度快。

常见hash函数设计:

(1)直接定值法

(2)平方取中法

(3)折叠法

(4)求余法

求余法示例(用于整数键):

python 复制代码
def hash_func(key, size):  
    return key % size  # 取模法  

三、冲突解决方法

链地址法

将冲突的键值对存储在同一个桶的链表中。查找时需要遍历链表。

python 复制代码
class HashTable:  
    def __init__(self, size):  
        self.size = size  
        self.table = [[] for _ in range(size)]  # 每个桶初始化为空列表  

    def insert(self, key, value):  
        index = hash_func(key, self.size)  
        for item in self.table[index]:  
            if item[0] == key:  
                item[1] = value  # 更新现有键  
                return  
        self.table[index].append([key, value])  # 添加新键值对  
开放寻址法

冲突时按规则(如线性探测、二次探测)寻找下一个空闲位置。

python 复制代码
def linear_probing_insert(table, key, value, size):  
    index = hash_func(key, size)  
    while table[index] is not None:  
        if table[index][0] == key:  
            table[index][1] = value  
            return  
        index = (index + 1) % size  # 线性探测  
    table[index] = [key, value]  

四、常见哈希表头文件配置

复制代码
typedef int DATATYPE;
typedef struct
{
DATATYPE* head;
int tlen;
}HS_TABLE;

HS_TABLE* CreateHsTable(int len);
int insertHsTable(HS_TABLE*hs,DATATYPE*data);
int SearchHsTable(HS_TABLE*hs,DATATYPE*data);
int DestroyHsTable(HS_TABLE*hs);

五、应用场景

  • 字典(Python的dict、Java的HashMap)。
  • 缓存系统(如Redis)。
  • 数据库索引。

六、注意事项

  • 哈希函数设计不当可能导致大量冲突,退化为O(n)时间复杂度。
  • 开放寻址法在删除时需特殊处理(如标记为"已删除"),避免查找链断裂。
相关推荐
郝学胜-神的一滴6 小时前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
盐焗西兰花7 小时前
鸿蒙学习实战之路-Reader Kit修改翻页方式字体大小及行间距最佳实践
学习·华为·harmonyos
颜酱7 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
QiZhang | UESTC7 小时前
学习日记day76
学习
久邦科技7 小时前
20个免费电子书下载网站,实现电子书自由(2025持续更新)
学习
m0_736919107 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi9878388 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
Gain_chance8 小时前
34-学习笔记尚硅谷数仓搭建-DWS层最近一日汇总表建表语句汇总
数据仓库·hive·笔记·学习·datagrip
DuHz8 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
Polaris北极星少女8 小时前
TRSV优化2
算法