当前位置: 首页 > news >正文

【算法】- 查找 - 散列表查询(哈希表)

文章目录

  • 前言
  • 一、哈希表的思想
  • 二、哈希表
  • 总结


前言

散列技术:在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)

哈希表:采用散列技术将记录存储在一块连续的存储空间中,这块连续存储空间称为散列表或哈希表


一、哈希表的思想

创建哈希表结构体:创建哈希表数据结构HashTable,用来存放散列地址和该散列表存放的数据个数。

//创建哈希表结构
typedef struct HashTable
{int count;//记录哈希表中元素个数int* elem;//创建哈希表
}HashTable;

初始化哈希表:初始化哈希表主要还是动态开辟存放数据的数组,再初始化count的个数,并将哈希表中的值赋值为空,这里用NULLKEY标志来表示为空。


//初始化哈希表
void InitHashTable(HashTable* HT)
{int i;m = MAXSIZE;//动态开辟内存HT->elem = (int*)malloc(m * sizeof(int));HT->count = MAXSIZE;for (i = 0; i < m; i++){HT->elem[i] = NULLKEY;}}

插入哈希表:插入哈希表,通过哈希函数Hash来计算出散列地址,判断该地址是否为NULLKEY,是的话就直接插入,不是的话就将散列地址赋值为下一个地址,继续判断,直到找到了就执行插入操作。

//哈希表的插入
void InsertHashTable(HashTable* HT, int key)
{int addr;addr = Hash(key);//求散列地址while (HT->elem[addr] != NULLKEY){addr = (addr + 1) % m;}HT->elem[addr] = key;
}

查询哈希表:先通过哈希函数获得散列地址,再通过散列地址查询访问。在查询时如果通过散列地址找到的值和key值不等,则散列地址找到下一个操作,直到循环一圈或则通过地址找到的地址为NULLKEY就返回查找失败,成功则返回查找成功。

//哈希表查找
int SearchHash(HashTable HT, int key)
{int addr = Hash(key);int begin = addr;while (HT.elem[addr] != key){addr = (addr + 1) % m;if (HT.elem[addr] == NULLKEY || addr == begin)return 0;}return 1;
}

二、哈希表

#define MAXSIZE 12
#define NULLKEY -32768
#include <iostream>
using namespace std;//哈希表查找//创建哈希表结构
typedef struct HashTable
{int count;//记录哈希表中元素个数int* elem;//创建哈希表
}HashTable;int m = 0;//初始化哈希表
void InitHashTable(HashTable* HT)
{int i;m = MAXSIZE;//动态开辟内存HT->elem = (int*)malloc(m * sizeof(int));HT->count = MAXSIZE;for (i = 0; i < m; i++){HT->elem[i] = NULLKEY;}}//散列函数
int Hash(int key)
{return key % m;
}//哈希表的插入
void InsertHashTable(HashTable* HT, int key)
{int addr;addr = Hash(key);//求散列地址while (HT->elem[addr] != NULLKEY){addr = (addr + 1) % m;}HT->elem[addr] = key;
}//哈希表查找
int SearchHash(HashTable HT, int key)
{int addr = Hash(key);int begin = addr;while (HT.elem[addr] != key){addr = (addr + 1) % m;if (HT.elem[addr] == NULLKEY || addr == begin)return 0;}return 1;
}int main()
{int i,result,key;HashTable HT;int arr[MAXSIZE] = { 12,67,56,16,25,37,22,29,15,47,48,34 };//初始化哈希表InitHashTable(&HT);key = 39;for (i = 0; i < m; i++){InsertHashTable(&HT, arr[i]);}result = SearchHash(HT,key);if (result)printf("查找 %d 成功 \n", key);elseprintf("查找 %d 失败。\n", key);for (i = 0; i < m; i++){key = arr[i];result = SearchHash(HT, key);if (result)printf("查找 %d 成功 \n", key);elseprintf("查找 %d 失败。\n", key);}return 0;
}

总结

散列表查找的效率是最高的,因为它的时间复杂度为O(1)。可惜在实际情况中,会产生冲突(不同的数据在同一地址的情况),但散列表查询还是非常值得的。

相关文章:

【算法】- 查找 - 散列表查询(哈希表)

文章目录 前言一、哈希表的思想二、哈希表总结 前言 散列技术&#xff1a;在记录的存储位置和它的关键字之间建立一个确定的对应关系f&#xff0c;使得每个关键字key对应一个存储位置f(key) 哈希表&#xff1a;采用散列技术将记录存储在一块连续的存储空间中&#xff0c;这块连…...

货币政策工具

本文为个人学习笔记&#xff0c;内容源于教材&#xff1b;整理记录的同时也作为一种分享。 1. 简介 货币政策工具作为央行实现货币政策目标的经济手段&#xff0c;以期达到最终目标&#xff0c;即物价稳定&#xff0c;充分就业&#xff0c;经济增长&#xff0c;国际收支平衡。…...

std::async概念和使用方法

std::async是 C 标准库中的一个函数模板&#xff0c;用于启动一个异步任务&#xff0c;并返回一个std::future对象&#xff0c;该对象可用于获取异步任务的结果。 1、概念 std::async允许你以异步的方式执行一个函数或者可调用对象&#xff0c;它会在后台启动一个新的线程或者…...

Chatgpt 原理解构

一、背景知识 1. 自然语言处理的发展历程 自然语言处理在不同时期呈现出不同的特点和发展态势。萌芽期&#xff0c;艾伦・图灵在 1936 年提出 “图灵机” 概念&#xff0c;为计算机诞生奠定基础&#xff0c;1950 年他提出著名的 “图灵测试”&#xff0c;预见了计算机处理自然…...

【每日刷题】Day135

【每日刷题】Day135 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. LCR 011. 连续数组 - 力扣&#xff08;LeetCode&#xff09; 2. 【模板】二维前缀和_牛客题霸_牛客…...

Linux运维01:VMware创建虚拟机

视频链接&#xff1a;05.新建VM虚拟机_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1nW411L7xm/?p14&spm_id_from333.880.my_history.page.click&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 1.点击“创建虚拟机” 2.选择“自定义&#xff08;高级&#xff0…...

服务器平均响应时间和数据包大小关系大吗?

服务器的平均响应时间与数据包大小有一定的关系&#xff0c;但这只是影响响应时间的众多因素之一。具体来说&#xff0c;数据包大小对服务器响应时间的影响可以从以下几个方面来理解&#xff1a; 1. 数据传输时间 影响: 较大的数据包需要更多的时间在网络上传输&#xff0c;因此…...

Vue入门-指令学习-v-show和v-if

v-show&#xff1a; 作用&#xff1a;控制元素的显示隐藏 语法&#xff1a;v-show"表达式" 表达式值true显示&#xff0c;false隐藏 v-if 作用&#xff1a;控制元素的显示隐藏&#xff08;条件渲染&#xff09; 语法&#xff1a; vif"表达式" 表达式tr…...

nacos多数据源插件介绍以及使用

概述 在微服务架构中&#xff0c;服务配置的集中管理和动态调整是至关重要的。Nacos 提供了配置管理和服务发现的功能&#xff0c;其中配置管理支持动态数据源的切换&#xff0c;增强了其在复杂环境中的适用性。默认情况下&#xff0c;Nacos 支持 MySQL 和Derby&#xff0c;但…...

国庆档不太热,影视股“凉”了?

今年国庆档票房止步21亿元&#xff0c;属实有点差强人意。 根据国家电影局统计&#xff0c;2024年国庆档&#xff08;2024年10月1日至7日&#xff09;全国电影票房为21.04亿元&#xff0c;观影人次为5209万&#xff0c;总票房成绩、观影总人次同比均有所下滑。 作为传统观影高…...

QtDesign预览的效果与程序运行的结果不一致的解决方法

存在的问题 使用Qt designer软件设计出来的界面&#xff0c;与转换成python程序运行出来的结果不一致&#xff0c;具体看下图 Qt designer预览结果 程序运行出来的结果 原因分析 我自己的电脑是2560*1600分辨率的屏幕&#xff0c;采用的是200%的缩放比例&#xff0c;出现这种…...

模运算和快速幂

文章目录 模运算快速幂 模运算 模运算是大数运算中的常用操作。如果一个数太大&#xff0c;无法直接输出&#xff0c;或者不需要直接输出&#xff0c;则可以对它取模&#xff0c;缩小数值再输出。取模可以防止溢出&#xff0c;这是常见的操作。 取模运算一般要求a和m的符号一…...

【机器学习】——神经网络与深度学习:从基础到应用

文章目录 神经网络基础什么是神经网络&#xff1f;神经网络的基本结构激活函数 深度学习概述什么是深度学习&#xff1f;常见的深度学习算法 深度学习的工作流程深度学习的实际应用结论 引言 近年来&#xff0c;神经网络和深度学习逐渐成为人工智能的核心驱动力。这类模型模仿人…...

Unity各个操作功能+基本游戏物体创建与编辑+Unity场景概念及文件导入导出

各个操作功能 部分功能 几种操作游戏物体的方式&#xff1a; Center:有游戏物体父子关系的时候&#xff0c;中心点位置 Global/Local:世界坐标系方向/自身坐标系方向 &#xff1a;调试/暂停/下一帧 快捷键 1.Alt鼠标左键&#xff1a;可以实现巡游角度查看场景 2.鼠标滚轮…...

QT入门教程攻略 QT入门游戏设计:贪吃蛇实现 QT全攻略心得总结

Qt游戏设计&#xff1a;贪吃蛇 游戏简介 贪吃蛇是一款经典的休闲益智类游戏&#xff0c;玩家通过控制蛇的移动来吃掉地图上的食物&#xff0c;使蛇的身体变长。随着游戏的进行&#xff0c;蛇的移动速度会逐渐加快&#xff0c;难度也随之增加。当蛇撞到墙壁或自己的身体时&…...

Linux No space left on device分析和解决

报错解释&#xff1a; "No space left on device" 错误表示你的Linux设备&#xff08;通常是磁盘分区&#xff09;上没有剩余空间了。这可能是因为磁盘已满&#xff0c;或者inode已满。磁盘空间是指磁盘上的实际空间&#xff0c;而inode是用来存储文件元数据的数据结…...

Qt实现Halcon窗口显示当前图片坐标

一、前言 Halcon加载图片的窗口&#xff0c;不仅能放大和缩小图片&#xff0c;还可以按住Ctrl键显示鼠标下的灰度值&#xff0c;这种方式很方便我们分析缺陷的灰度和对比度。 二、实现方式 ① 创建显示坐标和灰度的widget窗口 下图的是widget部件&#xff0c;使用了4个label控…...

构建宠物咖啡馆:SpringBoot框架的实现策略

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于Spring Boot的宠物咖啡馆平台的设计与…...

Qt开发环境的搭建

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Qt开发环境的搭建 收录于专栏【Qt开发】 本专栏旨在分享学习Qt的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. Qt开发工具概述 Qt…...

docker-compose查看容器日志和实时查看日志

要查看 docker-compose up 过程中容器启动的错误日志&#xff0c;可以使用以下方法&#xff1a; ### 1. **使用 docker-compose logs 命令** 1. 在终端中进入包含 docker-compose.yml 文件的目录。 2. 运行以下命令来查看所有容器的日志&#xff1a; bash docker-compose…...

模型切换总报错?Trae 在模块四迁移中解决 3 类兼容性问题的配置要点

1. 模型切换总报错?不是模型的问题,是配置没对齐上下文契约 我在三个中型项目里反复遇到同一个现象:刚切完模型,Trae 就在右下角弹出红色提示——“Context initialization failed” 或 “Model adapter mismatch: expected Claude-3-haiku, got DeepSeek-VL-4”。不是模型…...

51单片机计算器DIY:除了加减乘除,你的LCD1602和矩阵键盘还能这样玩?

51单片机计算器进阶指南&#xff1a;解锁LCD1602与矩阵键盘的隐藏玩法 当你在51单片机上成功实现了一个基础计算器后&#xff0c;是否想过这两个核心外设——LCD1602液晶屏和4x4矩阵键盘——还能玩出什么新花样&#xff1f;本文将带你超越简单的加减乘除&#xff0c;探索硬件模…...

【亲测免费】 ADS1118驱动程序

ADS1118驱动程序 【下载地址】ADS1118驱动程序 本仓库提供了专用于ADS1118模数转换器&#xff08;ADC&#xff09;的驱动程序。ADS1118是一款高性能、高精度的16位模拟到数字转换器&#xff0c;广泛应用于需要精准测量的应用场景中&#xff0c;例如传感器数据采集系统、医疗设备…...

Maintain Certificate Trust List,把 SAP 出站通信里的证书信任关口管清楚

做 SAP S/4HANA Cloud、SAP BTP ABAP environment 或者混合架构里的出站集成时,有一个问题很容易被业务侧低估,却经常成为接口上线前的最后一道卡点,SAP 系统到底信不信任通信伙伴的服务器证书。OAuth、Basic Authentication、Communication Arrangement、Destination、ODat…...

专业级LaTeX排版:深度解析中国科学技术大学学位论文模板括号使用的最佳实践

专业级LaTeX排版&#xff1a;深度解析中国科学技术大学学位论文模板括号使用的最佳实践 【免费下载链接】ustcthesis LaTeX template for USTC thesis 项目地址: https://gitcode.com/gh_mirrors/us/ustcthesis 在学术论文写作中&#xff0c;细节决定专业水准。中国科学…...

WinSW实战:除了开机自启,这样配置还能监控你的Nacos服务状态与日志

WinSW进阶实战&#xff1a;构建Nacos服务的全方位监控体系 对于许多使用Nacos作为注册中心和配置中心的团队来说&#xff0c;确保其稳定运行是系统可靠性的基石。虽然通过WinSW将Nacos注册为Windows服务并实现开机自启解决了基础问题&#xff0c;但真正的挑战在于服务运行后的状…...

STM32CubeMX配置FreeRTOS时,那个不起眼的定时器TIM16到底在干嘛?新手避坑指南

STM32CubeMX配置FreeRTOS时&#xff0c;那个不起眼的定时器TIM16到底在干嘛&#xff1f;新手避坑指南 第一次在STM32CubeMX里勾选FreeRTOS组件时&#xff0c;很多开发者会对配置页面底部那个"Hardware Timer"选项感到困惑——为什么默认选中了TIM16&#xff1f;这个看…...

告别‘涂抹感’:深入浅出聊聊Chromatix ISP里ABF模块的‘边缘保留’与‘噪声消除’如何平衡

告别‘涂抹感’&#xff1a;深入浅出聊聊Chromatix ISP里ABF模块的‘边缘保留’与‘噪声消除’如何平衡 在手机摄影普及的今天&#xff0c;我们常常会遇到这样的困扰&#xff1a;夜间拍摄的照片要么噪点明显&#xff0c;要么经过降噪处理后变得模糊不清&#xff0c;丢失了细节…...

无王无帝定乾坤,来自田间第一人 海棠山铁哥布大道兴世

无王无帝定乾坤 ——来自田间第一人“山河起落&#xff0c;不在帝王&#xff1b;世道兴衰&#xff0c;系于百姓。”一、王权落幕&#xff0c;大道升起 古往今来&#xff0c;世人总把天下兴亡系于龙椅之上。 却不知—— 真正扭转乾坤的力量&#xff0c;深藏在乡野沃土&#xff0…...

Bilibili-Evolved终极指南:构建你的个性化哔哩哔哩增强体验

Bilibili-Evolved终极指南&#xff1a;构建你的个性化哔哩哔哩增强体验 【免费下载链接】Bilibili-Evolved 强大的哔哩哔哩增强脚本 项目地址: https://gitcode.com/gh_mirrors/bi/Bilibili-Evolved Bilibili-Evolved是一款功能强大的哔哩哔哩增强脚本&#xff0c;通过创…...