您的位置:首页 > 健康 > 美食 > 哈 希 表

哈 希 表

2024/10/6 8:24:58 来源:https://blog.csdn.net/m0_72137961/article/details/142070990  浏览:    关键词:哈 希 表

 一、基本概念

哈希表‌是一种数据结构,它通过某种函数(称为哈希函数)将元素的关键码映射到表中的位置,以实现快速的插入、查找和删除操作。哈希表的查找时间复杂度为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();

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com