使用哈希存储将数据存入哈希表中,并进行查找:
头文件:
#ifndef _HASH_H_
#define _HASH_H_
#include<stdio.h>
#include<stdlib.h>
#define N 10
#define P 13
typedef int datatype;
typedef struct Node
{
datatype data;
struct Node *next;
}node;
void init_hash(node *hash[]);
void insert_hash(node*hash[],int x);
void show_hash(node*hash[]);
void search_hash(node*hash[],int num);
#endif
功能函数:
#include"hash.h"
void init_hash(node*hash[]) //初始化哈希表
{
for(int i=0;i<P;i++)
{
hash[i] = NULL;
}
printf("初始化成功\n");
}
void insert_hash(node*hash[],int x) //将值存储入哈希表中
{
int index = x%P; //定位要存储的链表
//将数据封装成节点
node*q =(node*)malloc(sizeof(node));
if(NULL==q)
{
printf("空间申请失败\n");
return ;
}
q ->data = x;
q-> next = NULL;
q->next = hash[index];
hash[index] = q;
}
void show_hash(node*hash[]) //遍历哈希表
{
for(int i=0; i<P;i++)
{
printf("%d:",i);
node*q = hash[i];
while(q!=NULL)
{
printf("%d->",q->data);
q = q->next;
}
printf("NULL\n");
}
}
void search_hash(node*hash[],int num) //按值查找
{
int index;
index=num%P;
node *p = hash[index];
while(p!=NULL&&p->data!=num)
{
p=p->next;
}
if(p==NULL)
printf("不在表中\n");
else
printf("在表中\n");
}
头文件:
#include"hash.h"
int main(int argc, const char *argv[])
{
int arr[N] = {25,51,8,22,26,67,11,16,54,41};
node *hash[P]; //哈希表
init_hash(hash);
for(int i = 0;i<N ;i++)
{
insert_hash(hash,arr[i]);
}
show_hash(hash);
search_hash(hash,26);
search_hash(hash,100);
return 0;
}
结果演示: