C语言hash函数
来源:互联网 发布:js map参数传递 编辑:程序博客网 时间:2024/06/05 17:43
#include <stdio.h>#include <stdlib.h>//这里我自己设计一个hash算法来快速查找一堆数字中相等的数字,这也许是最接近原理的算法了//一个整数整除27后的来作为hash函数//定义一个保存实际数据的结构体节点struct data_node{ int num; int count; struct data_node *next;};//定义一个结构体时hash表的一部分typedef struct{ int key; //余数 struct data_node *p; //链表的头指针} hash_node;#define HASH_SIZE 27int do_hash(int num) //hash表来求余数,这样就可以了{ return num%HASH_SIZE;}//初始化//添加数字//更新数字//删除数字//查找数字hash_node HashTable[HASH_SIZE]; //这里申明一个hashtable的数组//初始化函数,需要做的事将key复制为null,将p指针指向null,返回一个头指针来指向这个hashtablevoid InitHashTable(hash_node *HashTable){ //进行参数的校验 for(int i=0;i<HASH_SIZE;i++) { HashTable[i].key = 0; HashTable[i].p =NULL; }}//保存到这个链表中//如果这个链表是空的话,就作为头指针,如果这个链表不为空,则添加到吧数字添加到末尾int savedata(struct data_node **head,int num){ struct data_node *tmp_p = *head; struct data_node *p = (struct data_node *)malloc(sizeof(struct data_node)); if(p == NULL) return 0; if(*head == NULL) { *head = p; p->count = 1; p->num = num; p->next = NULL; } else //如果不为空,则这个时候应该添加到链表末尾 { while(tmp_p != NULL)//如果存在,则将这个节点的count加1就可以了 { if(tmp_p->num == num) { free(p); ++tmp_p->count ; return 0; } if(tmp_p->next == NULL) break; tmp_p = tmp_p->next; } tmp_p->next = p; p->count =1; p->num = num; p->next = NULL; } return 0;}//添加数字//将这个数字经过hash求出结果,然后再保存到相应的链表中//返回真或者假就可以了int add_hash(hash_node *HashTable,int num){ int mod = do_hash(num); return savedata(&HashTable[mod].p,num);}int main(){ int num = 100; hash_node *H = HashTable; InitHashTable(H); add_hash(H,num); add_hash(H,num); add_hash(H,3); add_hash(H,1); add_hash(H,4); //在这里我们可以发现一个好的hash函数是多么的重要,如果hash函数不好造成很多冲突的话,效率并不会提高很多的,理想的情况是冲突几乎没有 //这也就是设计hash函数的精髓所在 return 0;}
0 0
- C语言hash函数
- hash表 c语言实现
- C语言 打造最快的Hash表
- 常用Hash算法(C语言实现)
- 常用Hash算法(C语言实现)
- C语言 拉链法HASH表存储
- 数据结构_8:查找:Hash:C语言
- 基于C语言的hash表
- 【C语言】C语言函数
- C语言函数 --C
- 数据结构 c语言实现哈希(hash)表查找 除留余数法构建hash函数开放定值法线性探测处理冲突
- Hash 函数、Hash表
- C 语言图形函数
- C语言图形函数
- C语言图形函数
- C语言图形函数
- C语言函数
- C语言内联函数
- Linux 硬限制和软限制 http://www.52ml.net/2624.html
- python list元素为dict时的排序
- Repeated DNA Sequences —— Leetcode(教训,重做)
- hdu 1067 Gap+BFS+hash
- LA 4670 Dominating Patterns (ac自动机)
- C语言hash函数
- USACO 1.3 Mixing Milk
- 树中最长路径 树形DP HDU 3534 Tree
- STM32 无线下载程序(非IAP)
- iOS开发问题之the file “XXX” could not be opened because you don't have permission to view it
- Linux下编程-----文件与IO(一)基本API
- NOIP2014解方程
- 轻松python之文件专题-关于目录树的一些操作
- 算法 练习1.1