首页 > 其他分享 >数据结构-哈希表

数据结构-哈希表

时间:2023-03-25 16:55:37浏览次数:40  
标签:属性 dictEntry 键值 哈希 数据结构 指针

 哈希表hashtable数据结构

dictht是hashtable的数据结构,dictEntry是每个entry元素的数据结构。
typedef struct dictht {
    //指针数组,这个hash的桶
    dictEntry **table;
    //元素个数
    unsigned long size;
    unsigned long sizemask;
    unsigned long used;
} dictht;
  • table属性是一个数组,数组中的每个元素都是一个指向哈希表节点的指针,每个哈希表节点都保存着一个键值对。
  • size属性记录了哈希表的大小,也即table数组的大小。
  • used属性记录了哈希表目前已有节点的数量。
  • sizemask属性的值总是等于size-1,这个属性和哈希值一起决定一个键应该被放到table数组的哪个索引上。

哈希表节点数据结构

typedef struct dictEntry {
    // 键
    void *key;
    // 值
    union {
        // 指向具体redisObject
        void *val;
        // 
        uint64_t u64;
        int64_t s64;
    } v;
    // 指向下个哈希表节点,形成链表
    struct dictEntry *next;
} dictEntry;
  • key属性保存键值对中的键
  • v属性保存键值对中的值,其中键值对的值可以是一个指针,或者是一个uint64_t整数,或者是一个int64_t整数
  • next属性是指向另一个哈希表节点的指针,这个指针可以将多个哈希值相同的键值对连接在一起,以此来解决键冲突(collision)的问题

哈希冲突

Redis 解决哈希冲突的方式,就是链式哈希。链式哈希也很容易理解,就是指同一个哈希桶中的多个元素用一个链表来保存,它们之间依次用指针连接。

 

 


 

 

标签:属性,dictEntry,键值,哈希,数据结构,指针
From: https://www.cnblogs.com/zhengbiyu/p/17255073.html

相关文章

  • HJ27_查找兄弟单词——哈希表查找
    思路:#先找出兄弟单词,按字典排序;输出第k个字典序单词,若没有则不用输出。关键是理解题目兄弟单词的定义。可通过测试案例明确兄弟单词单词定义。如刚开始我的check,只是用se......
  • 数据结构与算法-目录
    数组头文件定义:链接初始化数组、清空销毁数组结构:链接输入元素创建数组、打印数组:链接数组扩容:链接在数组尾部追加元素:链接插入元素:链接删除元素:链接删除元素X:链接......
  • 数据结构-->单链表OJ题--->讲解_02
    老铁们,本期讲解反转单链表双指针法代码如下所示:>现在附上测试环节:>以及最终实现的图样链表,如下:另外,别忘了对“Reverse_SLT”反转函数于头文件中声明!!这就是采用双指针......
  • 数据结构-->单链表OJ题--->讲解_01
    老铁们,本期我们开讲单链表OJ题的讲解:删除单链表中给定的val值,并将剩余的链表进行链接本题中val的值是11,删除后的图示链接为:>显然,我们需要指针cur移动来寻找指定数值val......
  • 数据结构合集
    链表链表是一种本身并不常用的数据结构。然而其衍生出的许多数据结构如块状链表和链式前项星等却十分甚至九分的常用。链表简介顾名思义,链表就是使用链连接在一起的数......
  • LevelDb-基本数据结构
    目录SliceArenaskiplist跳表本质时空复杂度插入,删除数据(如何维护索引)极端情况分析:不维护索引极端情况分析:每次插入都维护插入效率和查找效率取舍删除对比红黑树的优势leve......
  • 【数据结构】数组与广义表 - 笔记
    数组与广义表的一章相对更为简单,第1,2节都是很熟悉的数组相关定义、实现等。因此这篇博客的讲述重点放在第3节“特殊矩阵的压缩存储”中的“稀疏矩阵”的存储以及第4节“......
  • 数据结构笔记1 绪论 概念
    最近这一段时间在学习数据结构。感觉还是很值得的。有老大的话说就是这次投资成功了。开始决定学习的时候买了一本书《数据结构(C语言版)》相信大家都看过吧。是严蔚敏老师......
  • 数据结构笔记4 栈
    栈的定义和概念栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。(1)通常称插入、删除的这一端为栈顶(Top),另一端称为栈底(Bottom)。(2)当表中没有元素......
  • log数据结构乱做
    SPOJGSS系列这个系列题目内容以维护区间最大子段和为主线。维护这个一般需要维护区间和,区间最大前缀,区间最大后缀,区间最大子段和四个信息。使用结构体封装和重载运算符可......