1: 表: 存储数据 key –> value;


2: 表存储数据结构的困难:
怎么查找? 一个一个key去比较去查找?==效率不高


**3: Hash算法加快查找;
将字符串的key,转成整数,使用整数找到对应的value;**

Hash算法将字符串转成整数,同样的Hash值得 key:value会放到一个集合里面,由于Hash能使得不同的字符串尽量有不同的整数值(仍然有重复);
将海量的数据,按照HASH值分成不同的集合,先找集合,再找key–>value,大大提高效率;


Hash表设计

1: key, value节点:
struct hash_node {
char* key;
void* node;
struct hash_node* next;
};

2: hash算法: 选取一种HASH算法;
3: 有限的集合数目, 定义一个集合数目,每个集合的元素用链表连接;
4: 对用户开放的hash表接口;
struct hash_table* creator_hash_table(集合的数目);
void destroy_hash_table(struct hash_table*);
void* hash_find(table, char* key);
hash_delete(table, char* key);
hash_insert(table, char*key, void* value); // 直接插入,不判断是否有key重复;
hash_set(table, char* key, void* value); // 如果key存在就覆盖,如果不存在返回;


  • 身份证(key):数据信息(value),如果我们有10000个学生,查找一个学生的话,很费劲;
  • 如果说有一个办法能均匀的将10000个人分成n个集合,(N100*100)我们有一种办法能快速的找到key,所对应的集合,那么就能很快的在集合里面找出所对应的value;
  • 怎么根据key来分集合;
  • 怎么分能够相对比较均匀;
  • 采用Hash算法
    • 1:将一个字符串变成一个整数 %N规模(0,N-1)的集合序号里面
    • 整数 %N = 集合序列号,[0,n-1],用数组来表示每个集合;
    • 2:对于不同的字符串,尽可能的生成不同的Key;
      • Hash散列,要散得足够均匀;
      • “hello”–>3;
      • “helmm” –>7;
      • 随机的字符串样本,能均匀的分布出来,分散开来;
    • 主流的Hash算法;
      • –》经典哈希算法

创建Hash结构


创建hash对象



引用mysql经典算法函数


增/插入数据



删除表


删除hash对象



修改数据


查询数据


总结

1: 理解HASH表的原理,为什么能实现基于名字快速查找;
2: 理解HASH算法;
3: 编写HASH表;


–>源码

c/c++ hash表 (哈希表、字典表)相关推荐

  1. 字典表(还需要输入2个字)

    字典表,是提供项目中一些字段的值,比如某个省的城市列表,或者海洋排污口的类型,等等.其作用,类似于系统开发过程中的数据字典,除了供查阅.备忘外,主要还是为了统一口径和标准.字典表就是将这些统一口径值( ...

  2. Two Sum (两数之和) - Hash Table (哈希表)

    Two Sum (两数之和) - Hash Table (哈希表) https://leetcode-cn.com/problems/two-sum/ Given an array of intege ...

  3. hash:哈希表 哈希桶

    目录 1.哈希的思想 2.解决冲突 3.哈希表(采用的闭散列,线性探测) 4.哈希桶(开散列) 5.总结 1.哈希的思想 hash是hash是一种根据存储的关键字的哈希值确定存储位置的算法.哈希值通过 ...

  4. 【散列表(哈希表) Hash Table(上)】:Word文档中的单词拼写检查功能是如何实现的?

    Word 这种文本编辑器你平时应该经常用吧,那你有没有留意过它的拼写检查功能呢?一旦我们在 Word 里输入一个错误的英文单词,它就会用标红的方式提示"拼写错误".Word 的这个 ...

  5. 解决Hash(哈希表)冲突的四种方案

    解决Hash(哈希)冲突的四种方案 参考&鸣谢 解决哈希冲突必须知道的几种方法 小僵鱼 你还应该知道的哈希冲突解决策略 vivo互联网技术 解决哈希冲突的三种方法 kaleidoscopic ...

  6. plsql tables 没有表_InnoDB 层锁、事务、统计信息字典表 | 全方位认识 information_schema...

    在上一篇<InnoDB 层系统字典表|全方位认识 information_schema>中,我们详细介绍了InnoDB层的系统字典表,本期我们将为大家带来系列第六篇<InnoDB 层 ...

  7. 分区表(表分区的具体作用、什么时候需要分区、表分区的优点)、表分区的几种类型及操作方法(range/hash/list/虚拟列/Interval/组合分区)、普通表转分区表的方法、分区表的其它操作

    文章目录 分区表(谨慎使用,了解即可) 表空间及分区表的概念 表分区的具体作用 什么时候需要分区 表分区的优点 表分区的几种类型及操作方法 范围分区(range) 哈希分区(hash) 列表分区(li ...

  8. 数据结构与算法五:哈希表-哈希函数设计原则-哈希冲突解决方案

    一.哈希表的定义: 二.哈希表举例: 哈希函数就是映射关系 三.哈希表应用举例: Leetcode上第387题: 思路:通过s.charAt(i)-'a'将字符串中的字符映射成hash表,出现一次,在 ...

  9. Clickhouse 字典表使用场景

    一.字典创建和查询 1.创建表和数据: drop table t_region; create table t_region(region_id UInt64, parent_region UInt6 ...

  10. redis初始化存储数据库字典表数据设计方案

    随着项目访问量的并发,对数据库操作越来越多,为了优化系统,将原数据库字典表提到了JVM内存里,但是随着开始着手集群后,弊端就出来了!最近想着将字典数据放到redis里,并且能够尽量实现多场景便捷读取. ...

最新文章

  1. 原生js自动完成 [转]
  2. PAT甲级1138 Postorder Traversal:[C++题解]前序遍历和中序遍历建树
  3. 破解visual sourcesafe数据库admin用户密码
  4. Android 创建其它应该程序的上下文对象
  5. 使用不可序列化的属性序列化Java对象
  6. 虚数填补了数学的哪一个缺口?
  7. Atom编辑器有一个LF、CRLF的切换
  8. 布线管理的设计(一)
  9. 深度学习网络模型实战
  10. iOS最好用的弹出框
  11. Java跨域问题以及如何使用Cors解决前后端 分离部署项目所遇到的跨域问题
  12. 管理感悟:方案能力与解决问题能力
  13. 人类一败涂地服务器不稳定,人类一败涂地崩溃怎么办 人类一败涂地游戏崩溃解决方法一览_游侠网...
  14. 1114 Family Property (25 point(s))
  15. CVPR 2021 预讲 · 华为诺亚专场,5 篇精华报告,覆盖NAS、蒸馏、检测和降噪
  16. CV大牛/实验室主页
  17. 数据结构——单向链表
  18. java获取发送时间间隔工具类,1秒前,1分钟前,1小时前...
  19. 人体神经构成结构示意图,神经元结构示意图简易
  20. 计算机病毒教案 大学,计算机病毒教案版本

热门文章

  1. OBS+SRS+centos7搭建局域网直播推流服务器
  2. 【地震数据处理】GAN网络基础知识
  3. 如何不用u盘将32位Windows转为64位Windows
  4. ESP8266WIFI模块了解一下(新手入门级别)
  5. Matlab排序函数sort()和sortrows()
  6. revit2019 导出obj_Revit导出OBJ格式
  7. nginx location正则匹配规则
  8. 《Axure RP8网站和APP原型制作 从入门到精通》
  9. redis视频教程 java_Redis高级运用视频教程
  10. 蛋糕网店/蛋糕店管理系统/蛋糕销售系统