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暑假多校联合---Friends(dfs枚举)
原题链接 Problem Description There are n people and m pairs of friends. For every pair of friends, they ...
- C# Excel处理工具
需求:选择一个Excel文件,然后对该Excel文件进行处理,再导出一个处理后的Excel文件. 效果图 声明:我对winform开发不熟,但是我看到许多开发人员做东西只管交差,从不考虑用户体验,也不 ...
- Tomcat性能调优方案
一.操作系统调优 对于操作系统优化来说,是尽可能的增大可使用的内存容量.提高CPU的频率,保证文件系统的读写速率等.经过压力测试验证,在并发连接很多的情况下,CPU的处理能力越强,系统运行速度越快.. ...
- javascript脚本设置输入框只读的问题
今天在开发中准备通过javascript设置input框只读属性的时候,用document.getElementById('input').readonly='readonly';结果发现这样设置无效 ...
- 一道js面试题
当然这道面试题并不一定就能在你面试的时候遇到,但是不怕一万就怕万一,会的多一些还是好的. 问:怎么判断一串字符中哪个字符出现的最多,最多几次或者这串字符分别有哪些,每个字符出现了几次.写你请出运算代 ...
- ZeroClipboard 复制到剪贴板
使用 ZeroClipboard 可以简单的将内容复制到剪贴板,通过 Adobe Flash 和 JavaScript 来实现.“Zero” 意义为这个类库没有界面,界面需要由你来建立. 版本: Ze ...
- php随机生成指定长度的字符串 可以固定数字 字母 混合
php 生成随机字符串 可以指定是纯数字 还是纯字母 或者混合的. 可以指定长度的. function rand_zifu($what,$number){ $string=''; for($i = 1 ...
- js异步方式
node.js的例子 1.回调 创建 main.js 文件 var fs = require("fs"); fs.readFile('input.txt','utf8', func ...
- iOS 3DES加密解密(一行代码搞定)
3DES(或称为Triple DES)是三重数据加密算法(TDEA,Triple Data Encryption Algorithm)块密码的通称.它相当于是对每个数据块应用三次DES加密算法.由于计 ...
- ABAP绘图功能模块概观(转)
ABAP Graphics FM OverviewABAP绘图功能模块概观 此处仅将功能模块及范例程序列出(若要列出详细参数篇幅过大) 2 Main Graphics Demo Program: GR ...