哈希表-散列表数据结构

news2024/11/18 17:49:27


1、什么是哈希表?

哈希表也叫散列表,哈希表是根据关键码值(key value)来直接访问的一种数据结构,也就是将关键码值(key value)通过一种映射关系映射到表中的一个位置来加快查找的速度,这种映射关系称之为哈希函数或者散列函数,存放记录的数组称之为哈希表。

哈希表采用的是一种转换思想,其中一个中要的概念是如何将「Key」转换成数组下标?

在哈希表中,这个过程有哈希函数来完成,但是并不是每个「Key」都需要通过哈希函数来将其转换成数组下标,有些「Key」可以直接作为数组的下标。

举例:

用哈希表来存放员工信息,我们可以利用员工号作为「Key」就可以直接作为数据的下标,不需要通过哈希函数进行转化。

如果我们用员工姓名作为「Key」,这时候我们就需要哈希函数来帮我们转换成数组的下标。

换句话说,哈希函数是帮我们把 非int 的「Key」转化成 int,用来做数组的下标。

在 uthash 开源C代码中,哈希函数主要使用了以下几种:

详细可以参考 https://troydhanson.github.io/uthash/userguide.html

2、哈希表主要解决什么问题?
    

哈希表提供了快速的插入操作和查找操作,无论哈希表总中有多少条数据,插入和查找的时间复杂度都是为O(1),因为哈希表的查找速度非常快,所以在很多程序中都有使用哈希表,例如拼音检查器。

· 事先不需要排序。

· 搜寻速度与数据多少无关。


3、内核中哪些算法用的了哈希表?

 举例:

linux 跑起来的时候 有很多进程,那有很多 task_struct 怎么连接呢?

linux里面有三种数据结构来连接task_struct ,  链表(方便遍历的时候用),树(方便找父进程),哈希表(方便从pid 找到task_struct)。

4、C语言如何使用哈希表?

uthash 是用宏实现的一个头文件,即可实现哈希表的一些列操作。

https://troydhanson.github.io/uthash/userguide.html#_a_hash_in_c

GitHub - troydhanson/uthash: C macros for hash tables and more

参考:

图文并茂详解数据结构之哈希表 - 知乎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1371574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

性能分析与调优: Linux 磁盘I/O 观测工具

目录 一、实验 1.环境 2.iostat 3.sar 4.pidstat 5.perf 6. biolatency 7. biosnoop 8.iotop、biotop 9.blktrace 10.bpftrace 11.smartctl 二、问题 1.如何查看PSI数据 2.iotop如何安装 3.smartctl如何使用 一、实验 1.环境 (1)主机 …

HarmonyOS4.0系统性深入开发15Want概述

Want概述 Want的定义与用途 Want是对象间信息传递的载体,可以用于应用组件间的信息传递。其使用场景之一是作为startAbility()的参数,包含了指定的启动目标以及启动时需携带的相关数据,如bundleName和abilityName字段分别指明目标Ability所…

Vue-10、Vue键盘事件

1、vue中常见的按键别名 回车 ---------enter <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>键盘事件</title><!--引入vue--><script type"text/javascript" src"h…

游戏版 ChatGPT,要用 AI 角色完善生成工具实现 NPC 自由

微软与 AI 初创公司 Inworld 合作&#xff0c;推出基于 AI 的角色引擎和 Copilot 助理&#xff0c;旨在提升游戏中 NPC 的交互力和生命力&#xff0c;提升游戏体验。Inworld 致力于打造拥有灵魂的 NPC&#xff0c;通过生成式 AI 驱动 NPC 行为&#xff0c;使其动态响应玩家操作…

问题记录:关于vivado报错解决

start_gui open_project E:/githome/xxxx.xpr ERROR: [Project 1-510] Parsing generated run data failed 在某些时候打开工程出现如下错误&#xff0c;运行源文件损坏。 解决办法&#xff1a; 重新打开工程。

scrollTop与offsetTop解决小分辨率区域块向上滚动效果效果,结合animation与@keyframes实现标题左右闪动更换颜色效果。

scrollTop 是一个属性&#xff0c;它表示元素的滚动内容垂直滚动条的位置。对于可滚动元素&#xff0c;scrollTop 属性返回垂直滚动条滚动的像素数&#xff0c;即元素顶部被隐藏的像素数。 offsetTop 是一个属性&#xff0c;用于获取一个元素相对于其父元素的垂直偏移量&…

揭秘智慧礼品背后的故事:AI怎么挑选礼物?

如若不是从事技术行业&#xff0c;在罗列礼品清单时&#xff0c;可能不会想到 “数据”&#xff0c;但幸运的是&#xff0c;我们想到了。如何将AI技术应用到当季一些最受青睐的产品中去&#xff0c;训练数据是这一智能技术的背后动力。很多电子设备或名称中带有“智能”一词的设…

中年危机与自我成长职业女性的心理转型之路

中年危机与自我成长&#xff1a;职业女性的心理转型之路 案例&#xff1a;李女士&#xff0c;45岁&#xff0c;职业女性 李女士是一位职业女性&#xff0c;人到中年&#xff0c;她突然感到自己的生活仿佛失去了方向。她来找我咨询&#xff0c;希望能够找到一条心理转型的道路&a…

数据结构入门到入土——链表(完)LinkedList

目录 一&#xff0c;双向链表 1.单向链表的缺点 2.什么是双向链表&#xff1f; 3.自主实现双向链表 接口实现&#xff1a; 二&#xff0c;LinkedList 1.LinkedList的使用 1.1 什么是LinkedList&#xff1f; 1.2 LinkedList的使用 1.LinkedList的构造 2.LinkedList的…

Ubuntu下多设备映射名称设置

目录 序言解决方法详细步骤编写映射规则文件针对 外设硬件信息 进行区分针对 机器人系统接口信息 进行区分 生效映射规则 摄像头外设特殊说明参考文献 序言 在机器人开发过程中&#xff0c;开发者会使用到多个外设&#xff0c;在传感器外设中&#xff0c;会用到激光雷达、摄像头…

关于git使用的tips

前言 这里是一些git指令使用的tips&#xff0c;如果你作为初学者的话&#xff0c;我认为它将对你有所帮助。 常见指令 常见问题处理 1、使用git clone下载【huggingface.co】资源超时或无法请求问题 绝大多数情况是网络问题&#xff0c;首先如果是比较大的资源&#xff0c;你需…

Centos7升级openssl到openssl1.1.1

Centos7升级openssl到openssl1.1.1 1、先查看openssl版本&#xff1a;openssl version 2、Centos7升级openssl到openssl1.1.1 升级步骤 #1、更新所有现有的软件包列表并安装最新的软件包&#xff1a; $sudo yum update #2、接下来&#xff0c;我们需要从源代码编译和构建OpenS…

【教3妹学编程-算法题】移除后集合的最多元素数

3妹&#xff1a;好冷啊&#xff0c; 冻得瑟瑟发抖啦 2哥 : 这才哪跟哪&#xff0c;上海这几天温度算是高的啦。你看看哈尔滨&#xff0c;那才是冰城。 3妹&#xff1a;据说沈阳千名“搓澡大姨”支援哈尔滨&#xff1f;哈哈哈哈 2哥 : 就像今年的淄博烧烤&#xff0c;可能有炒作…

【VTKExample::Visualization】第四期 BLOW

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享Blow样例,用于挤出吹塑工艺的有限元分析,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 目录 前言 1. Blow样例

Mariadb和mysql数据库的区别和相同之处

目 录 一、maridb 和mysql在linux系统中广泛应用 二、MySQL数据库 三、MariaDB数据库 四、MariaDB和MySQL有哪些相同点 五、MariaDB和MySQL的不同点 一、mariadb 和mysql在linux系统中广泛应用 用linux&#xff08;包括centos和Ubuntu&#xff09;的都知道&a…

浅谈WAF——守护网络安全的无形之盾

随着信息化时代的到来&#xff0c;网络已逐渐融入我们日常生活的方方面面。然而&#xff0c;与此同时&#xff0c;网络安全问题却也如影随形。为此&#xff0c;一种名为“Web应用防火墙”的工具应运而生&#xff0c;简称”WAF”。 WAF是什么&#xff1f; WAF&#xff08;Web …

再不收藏就晚了,Axure RP Pro 各版本大集合

Axure RP Pro下载链接 https://pan.baidu.com/s/1hRJRY6t0ZONKhdwvykAc3g?pwd0531 1.鼠标右击【Axure RP Pro9.0】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;选择【解压到 Axure RP Pro9.0】。 2.打开解压后的文件夹&#xff0c;鼠标右击【Axu…

Java进阶 1-3 枚举(switch的新特性)

本笔记参考自&#xff1a; 《On Java 中文版》 在Java中&#xff0c;“模式匹配”经历过好几个版本的功能扩充。这些扩充和switch关键字密切相关。如果对Java最新的特性感兴趣&#xff0c;可以查看Java增强建议&#xff08;JEP&#xff09;。 新特性&#xff1a;switch的箭头语…

Java爬虫获取省市区镇村5级行政区划

公司有个项目需要五级行政区划&#xff0c;没有现成的数据&#xff0c;写了一段代码&#xff0c;从gj统计j获取的数据。记录一下。 1.引入maven解析html <!-- jsoup --> <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifa…

nextjs + ahooks 报错 Cannot use import statement outside a module

在 nextjs 中使用 ahooks 时&#xff0c;报错 SyntaxError: Cannot use import statement outside a module&#xff0c;如下图所示&#xff1a; 解决方案 transpilePackages 官网介绍 Next.js can automatically transpile and bundle dependencies from local packages (lik…