#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"hash.h"
Hash *CreateHash()
{
Hash *phash = (Hash*)malloc(sizeof(Hash));
if ( NULL == phash)
{
return phash;
}
memset(phash,0,sizeof(Hash));
return phash;
}
void Destroy(Hash *phash)
{
if ( NULL == phash )
{
return;
}
int i = 0;
HNode *pNode = NULL;
HNode *pTmp = NULL;
for ( i = 0 ; i <HASH_SIZE; i++ )
{
pNode = phash->table[i];
if ( NULL == pNode)
{
continue;
}
while ( NULL != pNode)
{
pTmp = pNode->pNext;
free(pNode);
pNode = pTmp;
}
}
free(phash);
phash = NULL;
pNode = NULL;
pTmp = NULL;
}
HNode* CreateNode(data_t data)
{
HNode*pNode = (HNode*)malloc(sizeof(HNode));
if ( NULL == pNode)
{
return pNode;
}
memset(pNode,0,sizeof(HNode));
pNode->data = data;
return pNode;
}
int InsertHash(Hash *phash,data_t tdata)
{
if ( NULL == phash )
{
return HASH_ERR;
}
int index = tdata.UserName[0] - 'a';
HNode *pNode = CreateNode(tdata);
pNode->pNext = phash->table[index];
phash->table[index] = pNode;
return HASH_OK;
}
int DeleteHash(Hash *phash,data_t pdata)
{
if ( NULL == phash )
{
return HASH_ERR;
}
int index = pdata.UserName[0] - 'a';
HNode *pNode = phash->table[index];
if ( NULL == pNode)
{
printf("not found\n");
return HASH_ERR;
}
if ( 0 == strcmp(pNode->data.UserName,pdata.UserName)
&& (0 == strcmp(pNode->data.UserPwd,pdata.UserPwd)))
{
phash->table[index] = pNode->pNext;
free(pNode);
pNode = NULL;
return HASH_OK;
}
else
{
while ( NULL != pNode->pNext)
{
HNode *pDel = pNode->pNext;
if ( 0 == strcmp(pDel->data.UserName,pdata.UserName)
&& (0 == strcmp(pDel->data.UserPwd,pdata.UserPwd)))
{
pNode->pNext = pDel->pNext;
free(pDel);
pDel = NULL;
return HASH_OK;
}
pNode = pNode->pNext;
}
}
printf("not found\n");
return HASH_ERR;
}
void ShowHash(Hash *phash)
{
if ( NULL == phash)
{
return;
}
HNode *pNode = NULL;
int i = 0;
for ( i = 0 ; i <HASH_SIZE ; i++ )
{
pNode = phash->table[i];
if ( NULL == pNode)
{
continue;
}
while ( NULL != pNode)
{
printf("%s %s\n",pNode->data.UserName,pNode->data.UserPwd);
pNode = pNode->pNext;
}
}
}
哈希表的数据结构,可以直接编辑使用调试。


哈希表是一种高效的数据结构,它通过特定的算法——哈希函数,将任意大小的键(key)映射到一个固定大小的数组索引上,从而实现快速的查找、插入和删除操作。在这个数据结构中,哈希冲突是常见的问题,解决冲突的方法通常有开放寻址法和链地址法。 在你提供的资料中,包含三个文件:`hash.c`、`main.c`和`hash.h`。`hash.c`文件应该是实现哈希表的具体逻辑,包括哈希函数的定义、插入、查找和删除等操作;`main.c`是主程序,用于测试和展示哈希表的功能;`hash.h`是头文件,包含了哈希表相关的函数声明和可能的数据结构定义。 哈希表的基本操作包括: 1. **插入**:当一个新元素需要加入哈希表时,先通过哈希函数计算出其对应的数组索引,然后将元素存储在该位置。如果该位置已有元素(哈希冲突),则根据冲突解决策略处理。 2. **查找**:给定一个键,同样使用哈希函数得到对应的索引,然后在该位置查找元素。如果使用链地址法解决冲突,可能需要遍历链表。 3. **删除**:找到要删除元素的存储位置,根据具体实现删除元素。链地址法中,这可能意味着从链表中移除节点;开放寻址法则需要找到下一个空的位置。 在`hash.c`中,哈希函数的设计至关重要,一个好的哈希函数可以使得不同键的哈希值尽可能分散,减少冲突。哈希函数通常需要考虑以下几点: - **均匀性**:哈希函数应尽可能使所有可能的键均匀分布在整个哈希表中。 - **简单性**:为了效率,哈希函数应尽量简单,避免复杂的计算。 - **无冲突**:理想情况下,不同的键应得到不同的哈希值,但这是不可能的,所以需要设计好冲突解决策略。 `main.c`文件中,你可以看到如何创建一个哈希表实例,向其中插入数据,以及进行查找和删除操作的示例。通过`gcc`编译这两个源文件,并链接到`hash.c`中的函数,就可以运行并调试这个哈希表实现。 `hash.h`头文件则会包含哈希表结构体的定义(如`struct HashTable`),以及与之相关的函数声明,如`initHashTable()`(初始化哈希表)、`insertElement()`(插入元素)、`searchElement()`(查找元素)和`deleteElement()`(删除元素)等。 在实际应用中,哈希表广泛应用于缓存系统、数据库索引、编译器符号表、唯一标识符生成等领域,它的高效性能使其成为许多系统的核心部分。学习和理解哈希表的工作原理,对于提升编程技能和解决实际问题具有重要意义。通过你提供的代码,读者不仅可以学习哈希表的理论知识,还能动手实践,深入理解这一数据结构的实现细节。























- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

- 粉丝: 14
- 资源: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- ,,上位机与PLC 通讯源码 上位机与三菱PLC,西门子PLC通讯 同时一起通讯,单独控制,三菱采用官方MX 通讯,支持三菱FX系列,A系列,Q系列,L系列,R系列,全系系列,各种串口和各种网口通讯
- 这是机器视觉相关的资料,自己整理的
- ,,基于蒙特卡洛法的概率潮流 安全性分析 以IEEE33节点的电网为研究对象,建立光伏和风电的概率出力模型,并采用蒙特卡洛法进行随机抽样,基于抽样序列进行概率潮流计算 最后得到电网的电压概率出力曲线
- ,,一种永磁同步电机无位置观测算法,采用的电流模型与pll,适用于表贴电机和内插电机,可实现带载闭环启动,全速度范围采用一个观测器,并且可以生成代码,已跑实际电机进行了验证,所有模块纯手工搭建,绝不是
- ,,导线平差反算程序(2021年7月版):此版为闭合导线,附合导线反算合成版,简化了输入数据工程量,新增了观测记录的新样式 可以选导线类型,等级,左右角,并且有自动校核显示,通过反算出的数据进行二次
- 前端分析-2023071100789s08
- 56页-智慧双碳园区建设方案.pdf
- 57页-小视科技智慧园区解决方案.pdf
- 双碳智慧园区建设解决方案PPT(55页).pptx
- 60页-德诺迈斯智慧园区解决方案.pdf
- 56页-智慧园区解决方案(伟景行).pdf
- 60页-智慧园区综合解决方案.pdf
- 2023-04-06-项目笔记 - 第四百三十四阶段 - 4.4.2.432全局变量的作用域-432 -2025.03.11
- 57页-零碳智慧园区数字化建设方案(2022).pdf
- 52页-智慧园区综合解决方案.pdf
- 20250303_135007.jpg


