尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
数据结构之哈希表
1.哈希算法将数据通过哈希算法映射成一个键值存取都在同一位置实现数据的高效存储和查找目标将时间复杂度尽可能降低至O(1)2.哈希碰撞多个数据通过哈希算法得到的键值相同数据存储时会存储在相同的地址称为哈希碰撞3.哈希表的相关操作3.1定义数据类型typedef struct infor { char name[32]; char tel[16]; }DataType_t;3.2定义结点类型typedef struct node { DataType_t data; struct node* pnext; }HSNode_t;3.3定义哈希算法int hash_function(char key) { if(keyakeyz) { return key-a; } else if(keyAkeyZ) { return key-A; } else { return HASH_MAX_SIZE-1; } }3.4向哈希表中插入数据int insert_hash_table(HSNode_t **hash_table,DataType_t data) { HSNode_t* pnodemalloc(sizeof(HSNode_t)); if(NULL pnode) { printf(malloc error\n); return -1; } pnode-datadata; pnode-pnextNULL; int addrhash_function(data.name[0]); pnode-pnexthash_table[addr]; hash_table[addr]pnode; return 0; }3.5遍历哈希表int show_hash_table(HSNode_t **hash_table) { HSNode_t* ptmpNULL; int i0; for(i0;iHASH_MAX_SIZE;i) { printf(%d:,i); ptmphash_table[i]; while(ptmp!NULL) { printf(%s %s ,ptmp-data.name,ptmp-data.tel); ptmpptmp-pnext; } printf(\n); } return 0; }3.6查找哈希表中某个元素HSNode_t *find_hash_table(HSNode_t **hash_table,char* name) { int addrhash_function(name[0]); HSNode_t* ptmphash_table[addr]; while(ptmp!NULL) { if(0 strcmp(ptmp-data.name,name)) { return ptmp; } ptmpptmp-pnext; } return NULL; }3.7销毁哈希表void destroy_hash_table(HSNode_t **hash_table) { for(int i0;iHASH_MAX_SIZE;i) { HSNode_t* ptmphash_table[i]; while(hash_table[i]!NULL) { hash_table[i]ptmp-pnext; free(ptmp); ptmphash_table[i]; } } }4.工程管理工具Makefile4.1MakefileMakefile用来管理代码的编译Makefile可以根据文件中的规则来选择符合条件的代码完成编译用于指导make工具编译和链接程序Makefile能够根据依赖关系和文件修改的时间戳来判断哪些代码需要编译哪些代码可以复用之前的编译结果提高编译效率避免重复编译4.2使用步骤4.2.1基本结构生成的文件:依赖的所有文件 生成命令方式a.out:main.c gcc​​生成的文件​​通常生成为 a.out​​依赖的所有文件生成目标所需要的文件通常是源代码文件以及其它目标文件生成命令方式​​上一步完成回车后使用Tab键开头编写命令用来生成目标4.2.2使用原理make​​工具会读取 Makefile从默认的第一个目标生成可执行程序开始对于每个目标make 会检查依赖文件是否存在以及依赖文件是否比目标文件修改时间更晚依赖存在或时间戳比目标文件新执行命令时间戳没有变化目标文件被认为是最新的不会再次编译4.2.3使用规则在工程目录下新建名为Makefile或makefile的文件Linux区分大小写在Makefile文件中根据基本结构定义生成目标文件及链接在终端使用make命令构建项目
RELATED

相关推荐

GRSL 2026 即插即用 | Transformer篇 | DCSA:动态稀疏门控自注意力,兼顾长距离依赖与局部细节表达!

GRSL 2026 即插即用 | Transformer篇 | DCSA:动态稀疏门控自注意力,兼顾长距离依赖与局部细节表达!

文章目录 模块出处 模块介绍 模块提出的动机(Motivation) 适用范围与模块效果 模块代码及使用方式 模块出处 Paper:Spectral Dynamic Attention Network for Hyperspectral Image Super-Resolution Code:Spectral Dynamic Attention Network for Hyperspectral Image Supe…

📅 2026/10/14 8:40:50
Three.js 扭曲教程

Three.js 扭曲教程

扭曲 Vortex Shader ▶ 在线运行案例 案例合集: 三维可视化功能案例(threehub.cn)开源仓库github地址: https://github.com/z2586300277/three-cesium-examples400个案例代码: 网盘链接 你将学到什么 ShaderMaterial 自定义着…

📅 2026/10/2 2:52:39
3PEAK思瑞浦 T74L1G17Q-SC5R-S SOT353 缓冲器和收发器

3PEAK思瑞浦 T74L1G17Q-SC5R-S SOT353 缓冲器和收发器

特性 宽电源电压范围,从1.65V到5.5V1/0容差输入至5.5V 所有输入均带施密特触发器输入 CMOS低功耗特性 1/OOFF支持部分断电保护 静电放电保护:4kVHE3M型号,1kVCDM型号 锁存性能超过JESD78标准,II类 符合汽车应用的AEC-Q100标准,等级…

📅 2026/8/25 11:21:34
MORE NEWS

更多资讯

📰

MAT内存分析避坑指南:hprof格式兼容与JVM参数调优

简介:本资源为Eclipse Memory Analyzer Tool(MAT)完整安装与使用包,面向Java开发者、性能调优工程师及JVM内存问题排查人员,专用于分析hprof格式的Java堆内存快照,解决内存泄漏、对象过度驻留、堆占用异常等…

📰

C语言从头学PDF:290页69节案头手册,从指针到文件操作避坑指南

简介:《C语言从头学》汇编是一份面向零基础及初学者的C语言自学PDF资料,由LaoWaiHang整理其CSDN专栏系列文章而成,适合希望系统掌握C语言、边看文字边对照代码理解知识点的编程入门者。资源包内共1个PDF文件,大小约17.03MB&#x…

📰

麒麟V10安装Docker:container-selinux依赖避坑

简介:面向在国产化服务器环境中部署容器运行时的运维人员与开发者的实操型手册,聚焦银河麒麟 V10 SP1 Server 无法直接获取 docker server 软件包这一常见障碍,给出可行的版本选择与落地路径。压缩包内共 1 个 docx 文档,约 17KB&…

📰

零基础学编程英语:1800个程序员必备词汇,从看懂报错到读懂文档

简介:这份资源是一套面向程序员的英语词汇手册,专为需要阅读英文技术文档、框架与API的开发者准备,覆盖前端、后端及计算机基础方向,从编程初学者到进阶开发者均可使用。内容以约1800个开发常用词汇为核心,每个词条配有…

📰

LIMS需求说明书拆解:从系统架构到二次开发实战

简介:这份《实验室信息管理系统用户需求说明书》是LIMS项目需求阶段的核心依据,面向系统分析师、项目经理、开发维护人员及课程项目参考。资源包共1个文件,为doc文档,约6.25MB,正文共76页,目录结构完整&…

📰

从JDBC到Spring JDBC:手写ORM框架的核心原理与设计实践

简介:这份PDF课程以Spring JdbcTemplate为起点,面向有一定Java基础、希望深入理解数据库访问层封装的开发者,讲解如何从零手写一个轻量级ORM框架。资源共1个PDF文件,压缩包约940KB,内容聚焦JDBC底层原理与结果集映射、…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬