用c语言实现基本数据结构(哈希表)

哈希表入门:用 C 语言实现简单哈希表(开放寻址法解决冲突) 本文通过C语言代码实例解析哈希表的基本原理与实现。首先介绍了哈希表的数据结构定义和初始化过程,重点分析了开放寻址法(线性探测)解决冲突的核心逻辑。代码示例展示了字符数据的插入操作,并通过主函数测试验证功能。文章还指出了当前实现的局限性(固定大小、单一数据类型等),提出了动态扩容、改进冲突处理等优化建议。最后强调了内存管理、负载因子控制等注意事项,总结了哈希表O(1)时间复杂度的优势,并鼓励读者思考查找功能实现、链地址法改造等扩展问题。该实现虽然简单,但清晰地展示了哈希表的核心工作机制。 阅读详情

用c语言实现基本数据结构(哈希表)

写这个哈希表总是段错误,找了半天的bug。。。原来是各种小错误不断,写得很蛋疼。

我是是用数组实现的,数组的最大值定义成的宏。一共只有四个函数,分别为初始化哈希表,构造哈希函数,将数据存进去,将数据取出来。

我假设的关键字范围为10以内的英文字母组合。

解决哈希冲突的方法用的线性探测。用这个,是因为比较简单。。。:)

结构体如下

struct hashdata{
	int data;
	char* key;
};

完整代码如下

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXHASH 1000

struct hashdata{
	int data;
	char* key;
};

void initHash(struct hashdata* hashTable,  int len){
	for(int i = 0; i< len; i++){
		hashTable[i].data = 0;
		hashTable[i].key = NULL;
	}
}

int convertHash(char * key){
	int re = 0;
	int len = strlen(key);
	if(len > 10){
		printf("key should less than 10 char");
	}
	for(int i = 0; i < len; i++){
		re += (float)(key[i]-65)*MAXHASH/10/48;
	}
	return (int)re; 
}

int saveHash(struct hashdata* hashTable, char* key, int data){
	int pos = convertHash(key);
	if(hashTable[pos].key == NULL){
		hashTable[pos].data = data;
		hashTable[pos].key = key;
	}else if(!strcmp(hashTable[pos].key, key)){
		hashTable[pos].data = data;
		printf("\nsave success!\n");
		return 1;
	}else{
		for(int i = 0; i< MAXHASH; i++){
			pos = (pos+1)%MAXHASH;
			if(hashTable[pos].key == NULL){
				hashTable[pos].data = data;
				hashTable[pos].key = key;
				printf("\nsave success!\n");
				return 1;
			}
		}
	}
	return 0; 
}

int findHash(struct hashdata* hashTable, char* key){
	int pos = convertHash(key);
	if(hashTable[pos].key == NULL){
		printf("\nno this data\n");
		return  0;
	}
	if(!strcmp(hashTable[pos].key, key)){
		return hashTable[pos].data;
	}else{
		for(int i = 0; i< MAXHASH; i++){
			pos = (pos+1)%MAXHASH;
			if(hashTable[pos].key == NULL){
				return  0;
			}
			if(!strcmp(hashTable[pos].key, key)){
				return hashTable[pos].key;
			}
		}
	}
	printf("\nno this data\n");
	return 0;
}


测试代码如下

#include"myHash.h"
	
int main(){
	struct hashdata* hashTable = (struct hashdata *)malloc(4*MAXHASH);
	printf("-----------------------\n");
	initHash(hashTable, MAXHASH);
	printf("-----------------------\n");
	saveHash(hashTable, "apple", 1000);
	saveHash(hashTable, "you", 888);
	saveHash(hashTable, "you", 999);
	saveHash(hashTable, "tree", 20);
	printf("-----------------------\n");
	printf("%d\n",  findHash(hashTable, "you") );
	printf("%d\n", findHash(hashTable, "is"));
}
数据结构之---C语言实现散列表(哈希Hash表) 阅读详情

相关推荐

C语言数据结构源码详解与实践

本文还有配套的精品资源,点击获取 简介:数据结构是计算机科学的核心,影响着算法设计和程序性能。本压缩包包含《数据结构》C语言源代码,详细示例了常见数据结构的实现,适合学习和复习。源码覆盖了数组、链表、栈、队列、树、图、散列表(哈希表)、堆和字符串等数据结构,以及排序和搜索算法的实现。通过学习这些数据结构和算法的源码,理解其操作的实现细节,可以提升编程技巧和优化算法效率,为实...

weixin_36303807的博客 1080

【数据结构】哈希表——C语言

主要介绍C语言提供的哈希函数。

Shun_Hua的博客 1万+

C语言实现数据结构教材例题源码实战

静态数组是在编译时确定大小并分配在栈区的数组,而动态数组则是在运行时通过堆内存分配创建,具有更大的灵活性。// 示例:静态数组与动态数组的定义// 静态数组:在栈上分配,生命周期随函数结束// 动态数组:在堆上分配,需手动释放int n = 5;return -1;i < n;++i) {// 必须显式释放return 0;链表的基本单元是节点,通常用结构体定义:int data;} Node;// 创建新节点if (!// 遍历打印。

weixin_42402664的博客 1047

哈希表-数据结构(C语言)

哈希表 什么是哈希表 我们在网站上注册账号时,当填好用户名后,系统都会判断用户名是否已被使用,如果已被使用,系统就会提示该用户名已被注册。那么系统是如何检测用户名是否被使用的呢?我们能想到的最简单的方法就是逐个比较,但是如果用户名有很多,查找效率就显得很低。还有一种方法就是把用户名按字典序排序进行二分查找,这个方法的效率的确是高了很多,可是前提是用户名是有序的,而有些时候我们并不能将用户名进行排序。那么还有没有更好的方法呢? 我们可以用 哈希表 来解决这个问题。哈希表又叫散列表,关键值通过哈希函数映射到数组

weixin_44681349的博客 1万+

东方财富网股票API逆向分析:手把手教你破解动态参数(2024最新版)

本文详细解析了2024年东方财富网股票API的动态参数生成机制,包括回调函数、身份验证和时效控制参数的逆向工程方法。通过实战代码演示,帮助开发者破解动态参数,实现高效稳定的股票数据爬取,适用于金融数据分析和量化交易场景。

weixin_29091105的博客 1024

Claude + Figma MCP 实战教程

• 拥有 Figma 的 Dev 或 Full seat(专业/企业账号)权限 才能启用 Dev-Mode MCP 服务 。• MCP 是通过标准接口连接 Claude 与 Figma,效率高,但目前仍为 Beta,稳定性可能有限。3. 服务启动后,会在本地运行,比如 http://127.0.0.1:3845/mcp 。如果设置正确,会显示已连接的 figma-dev-mode-mcp-server  。• 如果多次转换复杂组件,可能需要多次选择与多次生成,建议合理拆分设计任务。

weixin_49869937的博客 4445

数据结构_哈希表(C语言)

哈希表中元素是由哈希函数确定的,将数据元素的关键字key作为自变量,通过一定的函数关系(称为哈希函数),计算出的值,即为该元素的存储地址。

小黯 1万+

手把手教你搞定MT6701磁编码器的SSI通信与CRC-6校验(附避坑代码)

本文详细介绍了MT6701磁编码器的SSI通信与CRC-6校验的实现方法,包括硬件连接、时序配置、数据读取和专用CRC-6算法。通过提供避坑代码和常见问题解决方案,帮助开发者快速掌握磁编芯片的调试技巧,确保通信稳定可靠。

weixin_30872337的博客 218

C语言-哈希表

了解c语言哈希表的常见用法

qq_51097294的博客 3658

ArcGIS栅格数据像元值与坐标值提取及Excel导出全流程解析

本文详细解析了使用ArcGIS将栅格数据批量提取像元值与坐标值并导出至Excel的全流程。通过“栅格转点”、“添加XY坐标”和“表转Excel”三大核心步骤,无需编程即可自动化处理遥感、环境等领域的空间数据,有效提升数据分析效率。

zeta9的博客 365

工业组态软件Intouch(单机版)入门{第二篇}

第5步:*都装好之后,需要进行测试授权是否生效,测试1:能否正常运行项目和编辑项目(能否编辑项目,取决于你的授权是否包含开发功能,如果只是单一的runtime授权,则只能运行项目,不能编辑项目)。在线第3步:点击第一个框右边的按钮,弹出文件浏览窗口,选中你的XMl授权文件,打开,然后你的授权出现在下方的列表中,勾选你的授权,然后点击Activate,等待几秒,授权就会出现在管理器页面的列表中,并且Status会显示Activated。第1步:软件安装好之后,先要配置好授权服务器。等待几秒,激活完成。

weixin_41571357的博客 1万+

哈希表(C语言)

哈希表 ​ 哈希表又称散列表,是一种是“key-value"形式存储的数据结构。即将key映射到表上的一个单元,从而实现快速查找等操作,这个映射操作就叫散列,具体通过散列函数实现相应的映射。根据key的形式,散列的形式多种多样,这里以正整数为例,常用的散列函数为: Hash(Key)=Key%TableSize Hash(Key) = Key \% TableSize Hash(Key)=Key%TableSize ​ TableSize为表长,一般情况下,我们希望一个元素能唯一对应表上的一个单元,但是这是

qq_45524140的博客 3402

句向量(句嵌入)模型sent2vec的训练及应用

本文讨论NLP中的句向量模型(sent2vec),也就是将一个完整的句子映射成一个实数向量的技术。这方面已经发表的成果也是比较多的,本文中所涉及的技术主要源自NAACL 2018的一篇论文,其中提出的sent2vec模型可以理解为词嵌入技术中经典的CBOW方法的扩展,该所谓的扩展中一个重要改进就是引入了n-gram

白马负金羁 1万+

哈希表的C实现(一)

哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。具体的介绍网上有很详细的描述,如闲聊哈希表 ,这里就不再累述了; 哈希表在像Java、C#等语言中是与生俱来的。可是在C的世界中,似乎只有自己动手,丰衣足食;在网上google了一把,大致有几个版本,我会一一...

200

STM32 TIM3硬件XOR+复位模式实现霍尔信号精准捕获

霍尔传感器是电机控制系统中获取转子位置的关键器件,其三路数字信号需通过高精度、低延迟的边沿检测机制转换为电角度信息。其核心原理在于利用定时器输入XOR逻辑合并多路信号,并结合从模式复位(Reset Mode)实现硬件级时间间隔测量——每次跳变强制计数器清零,使CNT值直接表征换相周期。该方案规避了软件轮询的不确定性,显著提升FOC控制的实时性与鲁棒性。典型应用场景包括BLDC/FOC电机驱动、机器人关节伺服及工业变频器设计,尤其适用于STM32F4系列等具备硬件XOR与从模式控制器的MCU平台。

weixin_28931507的博客 91

Midscene.js(1):Chrome 插件实战之基于 AI 驱动 WEB UI 自动化测试「喂饭教程」

Midscene.js 是一款开源的AI驱动UI自动化工具,支持自然语言交互、数据提取、断言验证等多种功能。自然语言交互。本文将以 Midscene.js Chrome 插件为例,带你从零上手,体验如何用最简单的方式实现高效、智能的UI自动化测试。

blues_C的博客 4404

【数据结构与算法】HashTable相关操作实现(附完整源码)

转载请注明出处:http://blog.youkuaiyun.com/ns_code/article/details/20763801 前言     学过Java的人肯定对Hash这个词非常之熟悉,HashTable、HashSet、HashMap等都是对哈希表的封装或改进。这次我们来看下哈希表用C语言表示的封装实现。 哈希表     哈希表又叫

杨柳岸,月影鸿泉的专栏 837

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

数据结构 哈希表

哈希表大小有限 向内存申请有限的堆空间哈希函数传入自己选取的关键字 此处为姓名的拼音的首字母,利用(26个小写字母和26个大写字母)字符对应的ASIIC码表,返回0~25的数字,若输入的不是汉字而是其他字符,返回哈希表空间数-1(26)。else。

Ameilide的博客 235

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

哈希表(Hash)

哈希表是一种基于哈希函数建立的一种查找表,也叫作散列表,是根据关键字和值直接进行访问的数据结构,其关键思想是使用哈希函数,将键key和值value映射到对应表的某个区块中。在哈希表的实际应用中,关键字的类型除了数字类型,还有可能是字符串型、浮点数、大整数型,甚至还有可能是集中类型的组合。

monlyy的博客 1056

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

c语言散列表的构造和查找,简单的哈希表实现 C语言

简单的哈希表实现这是一个简单的哈希表的实现,用c语言做的。原理先说一下原理。先是有一个bucket数组,也就是所谓的桶。哈希表的特点就是数据与其在表中的位置存在相关性,也就是有关系的,通过数据应该可以计算出其位置。这个哈希表是用于存储一些键值对(key -- value)关系的数据,其key也就是其在表中的索引,value是附带的数据。通过散列算法,将字符串的key映射到某个桶中,这个算法是确定的...

weixin_42502408的博客 787

【数据结构】从原理到实战:一文吃透散列表

本文系统介绍了散列表(HashTable)的核心原理与实现方法。主要内容包括:散列表通过散列函数将键映射到存储位置,实现O(1)时间复杂度的查找、插入和删除操作;详细讲解了散列函数的设计原则(高效计算、均匀分布、一致性)和常见实现方法(除留余数法等);针对不可避免的哈希冲突问题,分析了链地址法和开放地址法(线性探测/二次探测/双重哈希)等解决方案;提供了C语言实现散列表的完整代码示例,包括数据结构定义、散列函数实现和基本操作;最后列举了散列表在数据库索引、缓存系统等领域的典型应用场景。文章强调散列函数设计的

大雨淅淅的博客 1452

C语言哈希表库函数uthash使用

你需要定义一个结构体,并在这个结构体中添加一个类型的字段,这个字段会被uthash库用来管理哈希表。int id;/* 用户ID *//* 用户名 *//* 使得结构体支持哈希表 */

changan277的博客 1975

数据结构(c语言)

c语言中掌握数据结构的重要性在C语言中,数据结构不仅是一种存储数据的方式,也是一种处理数据的方法,数据结构在其编程中起着至关重要的作用。综合以上内容,数据结构是程序设计的基础,这些数据结构在C语言中有着广泛的应用,它们可以根据具体问题的需求进行选择和组合,以实现高效、灵活的算法和程序。

2401_87647313的博客 4162

c语言数据结构之哈希表

哈希表(Hash Table,也叫散列表)是一种非常重要的数据结构,它提供了一种通过键值(key)直接访问在存储位置中的数据的方法。其基本思想是将键值通过哈希函数转换为数组的索引,然后通过这个索引快速定位到相应的值(value)。总的来说,哈希表是一种高效且灵活的数据结构,它在处理大量数据时具有显著的优势。然而,也需要注意其可能存在的空间利用率和哈希冲突等问题,并根据实际情况选择合适的实现方法。在实际应用中,哈希表被广泛应用于各种需要快速查找的场景,如数据库索引、缓存系统、编译器中的符号表等。

2302_81141389的博客 1397

c语言哈希表电子辞典_哈希表实验C语言版实现

复制代码 代码如下:/*数据结构C语言版 哈希表*/#include #include #define NULLKEY 0// 0为无记录标志#define N 10// 数据元素个数typedef int KeyType;// 设关键字域为整型typedef struct{KeyType key;int ord;}ElemType; // 数据元素类型// 开放定址哈希表的存储结构int ...

weixin_39605997的博客 120

C语言实现哈希表:解决数据存储与检索的高效利器

用C语言实现哈希表:解决数据存储与检索的高效利器

平乾的博客 792
上一篇: 用c语言实现基本数据结构(二叉树)
下一篇: c语言之重复声明变量
learnanddeath
博客等级 码龄9年 16粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值