这里使用了编号代替真实的数据,只用来表示算法
#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
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;imaxlen;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;imaxlen;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;imaxlen;i++){
free(hash->table[i]);
hash->table[i]=NULL;
}
free(hash->table);
hash->table=NULL;
free(hash);
hash=NULL;
}
二分查找和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 ...
随机推荐
neo4j-访问提示No authorization header supplied.
在使用java连接neo4j数据库时 public static void main(String[] args) throws SQLException { Connection con = Dri ...
E. Santa Claus and Tangerines 二分答案 + 记忆化搜索
http://codeforces.com/contest/752/problem/E 首先有一个东西就是,如果我要检测5,那么14我们认为它能产生2个5. 14 = 7 + 7.但是按照平均分的话, ...
hdu 4009 Transfer water(最小型树图)
Transfer water Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 65768/65768 K (Java/Others)To ...
wikioi 1203 判断浮点数是否相等
/*======================================================================== 1203 判断浮点数是否相等 题目描述 Descr ...
Codeforces Gym 100002 E ";Evacuation Plan"; 费用流
"Evacuation Plan" Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10 ...
关于JFace中的进度条对话框(ProgressMonitorDialog类)
在Windows操作系统中,最常用的进度条对话框就是文件复制时的弹出框,如果想让用户愉快的使用你开发 的软件,那么在执行某个较长时间的操作时候,就应该弹出一个进度条提示框,告诉用户程序正在做什么. 做 ...
progressBar 自定义
自定义 ProgressBar 进度条 自定义样式[复制链接] 黑牛 黑牛当前离线 威望 33 在线时间 31 小时 金钱 443 贡献 10 诚信度 0 最后登录 2013-10-17 ...
表达式:使用API创建表达式树(6)
一.ConstantExpression:表示具有常量值的表达式.因为表达式应用过程中,参数据多是 Expressions 类型,算是对常量值的一种包装吧. ConstantExpression使用比 ...
java之从字符串比较到==和equals方法区别
我们先看代码 String str1 = new String("hello"); String str2 = "hello"; System.out.prin ...
关于使用lazytag的线段树两种查询方式的比较研究
说到线段树,想来大家并不陌生——最基本的思路就是将其规划成块,然后只要每次修改时维护一下即可. 但是尤其是涉及到区间修改时,lazytag的使用往往能够对于程序的质量起到决定性作用(Ex:一般JSOI ...