#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
#define true 1
#define false 0
typedef int elemtype;
typedef int status;
typedef struct HashNode{
elemtype elem;
struct HashNode *next;
}HashNode,*pNode;
//生成key
//公式:key = elem % 哈希表大小
int HashKey(elemtype elem){
int key;
key=elem%MAXSIZE;
return key;
}
//创建哈希表
status CreateHash(pNode *hashmap,elemtype elem[],int size){
int i=0;
int key;
for (i = 0; i < size; ++i)
{
//获得元素的key
key=HashKey(elem[i]);
//新建一个哈希表节点
pNode temp = (pNode)malloc(sizeof(pNode));
temp->elem=elem[i];
//如果key对应的哈希表为空,则把节点加入哈希表之后;
if(hashmap[key]==NULL){
temp->next=hashmap[key];
hashmap[key]=temp;
}
//如果不为空,直接赋值为新建的节点
else{
hashmap[key]=temp;
}
}
return true;
}
//查找元素,并且输出元素
status FindHashElem(pNode *hashmap,elemtype elem){
//获取元素的key
int key=HashKey(elem);
//获取哈希表中对应的key的节点
pNode temp=hashmap[key];
//当节点不为空的时候搜索
while(temp!=NULL){
//如果找到输出元素和他的key值
if (temp->elem==elem)
{
printf("查找结果为:");
printf("%d\n",temp->elem);
printf("对应的key值为:");
printf("%d",key);
return true;
}
//如果不相等,指向下一个节点
else{
temp=temp->next;
}
}
//没有搜索到这个元素
printf("没有这个元素");
return false;
}
int main(){
int i,j;
//数组
elemtype num[100];
//数组大小
int size;
pNode hashmap[MAXSIZE];
//把哈希表全部赋值为空
for (i = 0; i < MAXSIZE; ++i)
{
hashmap[i]=NULL;
}
printf("请输入数组大小:");
scanf("%d",&size);
for (j = 0; j < size; ++j)
{
printf("请输入数组元素:");
scanf("%d",&num[j]);
}
//创建哈希表
CreateHash(hashmap,num,size);
//查找元素
int findelem;
printf("请输入要查找的元素:");
scanf("%d",&findelem);
FindHashElem(hashmap, findelem);
return 0;
}
哈希表C语言实现
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 原文链接: http://draveness.me/hashtable/关注仓库,及时获得更新:iOS-Sourc...
- 一、什么是Hashtable? Hashtable 类代表了一系列基于键的哈希代码组织起来的键/值对。它使用键来访...
- 【作者】杨雨琛 【派别】文魁派 【导师】王玉印老师 【分舵】第二分舵 思维分舵 【舵主】董季节 最近刚看的一本书,...