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

哈 希 表

 一、基本概念

哈希表‌是一种数据结构,它通过某种函数(称为哈希函数)将元素的关键码映射到表中的位置,以实现快速的插入、查找和删除操作。哈希表的查找时间复杂度为O(1),这使得它在处理大量数据时非常高效。

    然而,哈希表也面临哈希冲突的问题,即不同的关键码通过哈希函数计算得到相同的位置,这种情况下需要通过解决冲突的方法来处理,如链地址法,开放地址法。

二、函数接口

hash.c

#include "hash.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>HSNode_t *hashtable[HASH_SIZE] = {NULL};int hash_function(char key)
{if (key >= 'a' && key <= 'z'){return key-'a';}else if (key >= 'A' && key <= 'Z'){return key-'A';}else{return HASH_SIZE-1;}
}int insert_hashtable(HSDataTYpe data)
{int addr = hash_function(data.name[0]);HSNode_t *pnode = malloc(sizeof(HSNode_t));if (NULL == pnode){perror("fail malloc");return -1;}pnode->data = data;pnode->pnext = NULL;pnode->pnext = hashtable[addr];hashtable[addr] = pnode;return 0;
}void hash_for_each()
{for (int i = 0; i < HASH_SIZE; i++){HSNode_t *p = hashtable[i];while (p != NULL){printf("%s %s	", p->data.name, p->data.tel);p = p->pnext;}printf("\n");}
}HSNode_t *find_hashtable(char *name)
{int addr = hash_function(name[0]);HSNode_t *p = hashtable[addr];while (p !=  NULL){if (!strcmp(name, p->data.name)){//	printf("%s %s\n", ptmp->data.name, ptmp->data.tel);return p;}p = p->pnext;}return NULL;
}void destroy_hashtable()
{for (int i = 0; i< HASH_SIZE; i++){	while (hashtable[i] != NULL){			HSNode_t *p = hashtable[i];hashtable[i] = p->pnext;free(p);}}
}

hash.h

#define HASH_SIZE 27typedef struct per
{char name[64];char tel[32];
}HSDataTYpe;typedef struct hsnode
{HSDataTYpe data;struct hsnode *pnext;
}HSNode_t;extern int insert_hashtable(HSDataTYpe data);
extern void hash_for_each();
extern HSNode_t *find_hashtable(char *name);
extern void destroy_hashtable();


http://www.mrgr.cn/news/23216.html

相关文章:

  • 记录深度学习量化操作
  • 朴素贝叶斯法(Naive Bayes)—有监督学习方法、概率模型、生成模型、非线性模型、参数化模型、批量学习、贝叶斯学习
  • [linux]GCC G++官方源码国内下载地址汇总
  • 详细步骤!分享6款AI论文写作助手自动生成器实例操作!
  • 【自考zt】【软件工程】【21.04】(部分)
  • 驾校预约学习系统的设计与实现
  • Rocky Linux9下安装Docker和卸载Docker
  • CTK框架(六):服务工厂
  • 重卡换电解决方案换电连接器
  • Flink
  • 代码随想录打卡Day27
  • AI绘图神器排行:MidJourney、Stable Diffusion等热门工具深度解析
  • 【SPIE独立出版,连续2届稳定EI检索!】2024年第三届信息学,网络与计算技术国际学术会议(ICINC2024,10月25-27)
  • Python 数学建模——假设检验
  • 设计模式应用
  • 【学习笔记】手写 Tomcat -- 预备知识
  • Linux:多路转接 select、poll、epoll
  • Mysql Innodb存储引擎原理—链接如下
  • [Python]使用python统计docx文档字符、单词数
  • 反序列化漏洞练习1