大家好,又见面了,我是你们的朋友全栈君。
哈希的关键在于算法,呵呵,我这算法,不说了,见笑了。哈希在内核中用得非常之广,准确来说是链表,下面是一个相对简单的例子,希望能对大家理解hash有些帮助。
/**************************************************************************************************************
**文件:hash.c
**编写者:huangminqiang
**编写日期:2010年2月8号
**简要描述:
**修改者:
**修改日期:
**注:主要在于查找,算法也比较简单、单一。
**************************************************************************************************************/
#include <stdio.h>
#include <malloc.h>
//测试数据
static int s_data[] = {4, 3, 2, 5, 1004};
#define MAX_HASH 100
#define HASH_GEN 1000//hash因子
typedef struct _node
{
int elm;
struct _node *next;
}node_t;
//HASH表数据结构
typedef struct
{
node_t *hash[MAX_HASH];
int count;
}hash_t;
//定义一个HASH表,用于保存测试数据
static hash_t s_hash;
//HASH函数定义
int hash_code(int data)
{
int index = 0;
//取余法
index = data % HASH_GEN;
return index;
}
//将元素插入HASH表
int insert_hash(hash_t *phash, int data)
{
int index = 0;
node_t *pnode = NULL;
node_t *phead = NULL;
//通过HASH函数计算表索引
index = hash_code(data);
//将data存入index位置链表的链表头
{
//为data新建节点
pnode = (node_t*)malloc(sizeof(node_t));
pnode->elm = data;
pnode->next = NULL;
//取得index位置链表头
//phead = phash->hash[index];
if (NULL == phash->hash[index])
{
//phead = pnode;
phash->hash[index] = pnode;
}
else
{
pnode->next = phash->hash[index];
phash->hash[index] = pnode;
}
}
//更新index位置值
//phash->hash[index] = phead;
phash->count++;
return 0;
}
//从HASH表查找元素
int search_hash(hash_t *phash, int data)
{
int index = 0;
int elm = 0;
node_t *phead = NULL;
//通过HASH函数计算表索引
index = hash_code(data);
//取得链表头
phead = phash->hash[index];
//从链表phead中查找data
{
while(1)
{
if (NULL == phead)
{
return -1;
}
if (phead->elm == data)
{
return phead->elm;
}
else
{
phead = phead->next;
}
}
}
return elm;
}
int main (void)
{
int i = 0;
//将元素插入HASH表
for (i = 0; i < sizeof(s_data)/sizeof(s_data[0]); i++)
insert_hash(&s_hash, s_data[i]);
//在HASH表中查询元素
{
int data = 4;
int ret = 0;
ret = search_hash(&s_hash, data);
}
return 0;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/126943.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...