hash查找
这里使用了编号代替真实的数据,只用来表示算法
#ifndef HASH_DATA_T
#define HASH_DATA_T int
#endif //HASH_DATA_T
typedef struct node_t{
HASH_DATA_T* data;
int num;
struct node_t* next;
}node_t;
typedef struct{
node_t** table; //数组指针表示hash表
int maxlen;
}hash_t;
//创建hash表
hash_t* create_hash(int len){
hash_t* H=(hash_t*)malloc(sizeof(hash_t));
H->table=(node_t**)malloc(len*sizeof(node_t*));
H->maxlen=len;
int i=0;
for(i=0;i<len;i++){
H->table[i]=(node_t*)malloc(sizeof(node_t));
H->table[i]->next=NULL;
}
return H;
}
//插入数据(编号)
int insert_hash(hash_t* H,int num){ //用编号代替了数据,需要其他数据的时候扩展一下就好
//对表单的个数取余,获得key
int key=num%H->maxlen;
node_t* pNode=H->table[key];
//封装节点
node_t* tmp=(node_t*)malloc(sizeof(node_t));
tmp->num=num;
for(pNode=H->table[key];pNode!=NULL;pNode=pNode->next){
if(NULL==pNode->next||pNode->next->num>tmp->num){
tmp->next=pNode->next;
pNode->next=tmp;
return 0;
}
}
return -2;
}
//显示表
int show_hash(hash_t* H){
int i=0;
node_t* pNode=NULL;
for(i=0;i<H->maxlen;i++){
for(pNode=H->table[i]->next;pNode!=NULL;pNode=pNode->next){
printf("%d ",pNode->num);
}
putchar(10);
puts("+++++++++++");
}
return 0;
}
//查找数据
int search_hash(hash_t* H, int num){
node_t* pNode=NULL;
int i=0;
for(i=0;i<H->maxlen;i++){
for(pNode=H->table[i]->next;pNode!=NULL;pNode=pNode->next){
if(pNode->num==num){
printf("%d ",pNode->num);
}
}
putchar(10);
puts("+++++++++++");
}
return 0;
}
//销毁hash表
int destroy_hash(hash_t* hash){
int i=0;
for(i=0;i<hash->maxlen;i++){
free(hash->table[i]);
hash->table[i]=NULL;
}
free(hash->table);
hash->table=NULL;
free(hash);
hash=NULL;
}
hash查找的更多相关文章
- 二分查找和hash查找
转载:http://blog.csdn.net/feixiaoxing/article/details/6844723 无论是数据库,还是普通的ERP系统,查找功能数据处理的一个基本功能.数据查找并不 ...
- Hash查找法在Keil C51中的实现
摘要:散列(hash)是一种重要的存储方法,也是一种常见的查找方法.它是指在记录的存储位置和它的关键字之间建立一个确定的对应关系.本文以射频卡门禁控制器为例,说明用射频卡卡号作为关键字,用Hash查找 ...
- 9.算法之顺序、二分、hash查找
一.查找/搜索 - 我们现在把注意力转向计算中经常出现的一些问题,即搜索或查找的问题.搜索是在元素集合中查找特定元素的算法过程.搜索通常对于元素是否存在返回 True 或 False.有时它可能返回元 ...
- 查找算法(顺序查找、二分法查找、二叉树查找、hash查找)
查找功能是数据处理的一个基本功能.数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下.我们假定查找的数据唯一存在,数组中没有重复的数据存在. (1)顺 ...
- 协议栈处理中的conntrack HASH查找/Bloom过滤/CACHE查找/大包与小包/分层处理风格
1.路由CACHE的优势与劣势 分级存储体系已经存在好多年了.其精髓在于"将最快的存储器最小化.将最慢的存储器最大化",这样的结果就使资源利用率的最大化.既提高了訪问效率,又节省了 ...
- 算法之顺序、二分、hash查找
算法之顺序.二分.hash查找 一.查找/搜索 - 我们现在把注意力转向计算中经常出现的一些问题,即搜索或查找的问题.搜索是在元素集合中查找特定元素的算法过程.搜索通常对于元素是否存在返回 Tru ...
- POJ 1200 Crazy Search 字符串的Hash查找
第一次涉及HASH查找的知识 对于字符串的查找有很多前人开发出来的HASH函数,比较常用的好像是ELF 和 BKDR. 这道题没想到突破点是在于其nc值,告诉你组成字符串的字母种类. 还有用26进制, ...
- 查找算法----二分查找与hash查找
二分查找 有序列表对于我们的实现搜索是很有用的.在顺序查找中,当我们与第一个元素进行比较时,如果第一个元素不是我们要查找的,则最多还有 n-1 个元素需要进行比较. 二分查找则是从中间元素开始,而不是 ...
- 海量路由表能够使用HASH表存储吗-HASH查找和TRIE树查找
千万别! 非常多人这样说,也包括我. Linux内核早就把HASH路由表去掉了.如今就仅仅剩下TRIE了,只是我还是希望就这两种数据结构展开一些形而上的讨论. 1.hash和trie/radix ha ...
随机推荐
- 2015 - 准备读书List
时刻提醒自己,不进步意味着倒退. 2015年准备读完的技术书籍: 1. <Redis设计与实现>
- 文件并发(日志处理)--队列--Redis+Log4Net
多线程操作同一个文件时会出现并发问题.解决的一个办法就是给文件加锁(lock),但是这样的话,一个线程操作文件时,其它的都得等待,这样的话性能非常差.另外一个解决方案,就是先将数据放在队列中,然后开启 ...
- TestNG官方文档中文版(5)-测试方法/类和组
5 - Test methods, Test classes and Test groups 5.1 - Test groups TestNG容许执行复杂的测试方法分组.不仅可以申明方法属于组,而且可 ...
- 简单可用好实现的 HA 高可用设计
本文为作者原创,如需转载请注明出处. 1. 实现的功能 一主多备,自动选主 启动记录可查询 2. 前置需求 一台数据库用以记录,如 MySQL.Redis.MongoDB 等.关键是设计中的思想,用啥 ...
- 我所知道的Javascript
javascript到了今天,已经不再是我10多年前所认识的小脚本了.最近我也开始用javascript编写复杂的应用,所以觉得有必要将自己的javascript知识梳理一下.同大家一起分享javas ...
- jquery的insertBefore(),insertAfter(),after(),before()
insertBefore():a.insertBefore(b) a在前,b在后, a:是一个选择器,b:也是一个选择器 <!DOCTYPE html> <html> < ...
- a标签的target属性
_blank 浏览器总在一个新打开.未命名的窗口中载入目标文档. _self 这个目标的值对所有没有指定目标的 <a> 标签是默认目标,它使得目标文档载入并显示在相同的框架或者窗口中作为源 ...
- jQuery Flat Shadow – 轻松实现漂亮的长阴影效果
长阴影其实就是扩展了对象的投影,感觉是一种光线照射下的影子,通常采用角度为 45 度的投影,给对象添加了一份立体感.长阴影快速发展为流行的设计趋势,并经常被应用到扁平设计方案的对象.更详细的介绍可以阅 ...
- 值得 Web 开发人员收藏的16款 HTML5 工具
HTML5 正在迅速改变创建和管理网站的方式.HTML5 在不同的领域让网页设计更强大的.快速,安全,响应式,互动和美丽,这些优点吸引更多的 Web 开发人员使用 HTML5 开发各种网站和应用程序. ...
- DevExpress v15.2.4帮助文档下载(全)
原文地址:http://www.devexpresscn.com/Resources/Documentation-498.html DevExpress v15.2帮助文档下载列表大全来啦!包含.ne ...