查找之Hash查找
来源:互联网 发布:金马甲网络交易平台 编辑:程序博客网 时间:2024/05/22 12:58
/*
名称:Hash查找
说明:Hash查找本质上就是把元素的关键字和元素的存储位置建立了一个映射联系,这样使得元素可以通过关键字立即查找到相应位置。这是最快的查找方式。但是在进行映射时有两个问题需要解决:
1、哈希函数的构造(映射函数)
一般来说,哈希函数有以下几种常用的构造方式
(1)、直接定址法
(2)、除留余数法
(3)、数字分析法
(4)、平方取中法
(5)、折叠法
其中前两种用的稍微多些。(至少目前我是这样认为的) 而且对于前两种方法,还可以把元素进行线性搬移。后三种方法主要是根据关键字的特征进行映射的。本程序用的是第二种
方式。
2、冲突的处理
对于冲突的处理,主要有以下两种方式;
(1)、开放地址法
其中又分为以下几种方式:
(a)、线性探测法
(b)、平方探测法
(c)、再散列法
(d)、伪随即数列法
(2)、拉链法:即把hash值相同的放到一个链表中。
*/
#include<iostream>#include<vector>#include<cstring>#define MAXSIZE 16using namespace std;//哈希表结构typedef struct Hash{ int * hash_table; int _count;}Hash;//初始化hash表void InitHash(Hash *_hash){ _hash->_count = 0; _hash->hash_table = new int[MAXSIZE]; //初始化为0 memset(_hash->hash_table,0,sizeof(int)*MAXSIZE);}//处理冲突,如果散列表已满返回-1,否则返回插入的位置int DealWithCon(Hash *_hash,int key){ if(_hash->_count >= MAXSIZE) return -1; else { int index = key % (MAXSIZE-1); //散列函数(除留余数法) //int index = key % (13); //线性探测法,每次冲突后探测下一个位置 while(_hash->hash_table[index % (MAXSIZE-1)] != 0) ++index; return index % (MAXSIZE-1); }}//散列表插入void InsertHash( int elem[],int n, Hash * _hash){ int index = 0; int key = 0; for(int i = 0;i<n;++i) { key = elem[i]; index = key % (MAXSIZE-1); if(_hash->hash_table[index] != 0) { if((index = DealWithCon(_hash,key)) == -1) cout<<"inset failed\n"; else _hash->hash_table[index] = key; } else _hash->hash_table[index] = key; }}//在Hash表中查找,查找成功返回其在hash表中的位置,否则返回-1int SearchHash(Hash * _hash,int key){ int index = key % (MAXSIZE-1); while(index <= MAXSIZE -1 ) { if(_hash->hash_table[index] == key) return index; else if(_hash->hash_table[index] == 0) return -1; else ++index; } return -1;}int main(){ Hash ex_table; InitHash(&ex_table); int n = 0,val = 0; int elem[20]; //输入元素 cin>>val; while(val != -1 ) { elem[n++] = val; cin>>val; } InsertHash(elem,n,&ex_table); while(1) { cout<<"please input data you want to search: "; cin>>val; int ret_flag = SearchHash(&ex_table,val); if(ret_flag != -1) cout<<"pos: "<<ret_flag<<endl; else cout<<"search failed"<<endl; } return 0;}
阅读全文
0 0
- 查找之hash查找
- 查找之Hash查找
- 数据结构之hash查找
- 查找算法之hash查找-1
- Hash查找
- hash查找
- hash查找
- Hash 查找
- Hash查找,散列查找
- 转贴:数据结构:Hash查找
- 查找算法----Hash表
- Hash查找算法
- Hash表查找
- poj2503 hash查找
- 查找算法----Hash表
- Hash快速查找
- Hash(哈希)查找
- 数据结构--Hash查找
- 测试测试一下
- Jenkins Git Maven搭建自动化部署项目环境 邮件通知
- mysql数据清洗备忘
- HADOOP源码编译
- AttributeError: 'module' object has no attribute '_base' 可行解决办法
- 查找之Hash查找
- 关于使用ant-design设计可动态添加FormItem的过程中遇到的问题记录。
- spark-shell启动报错:Yarn application has already ended! It might have been killed or unable to launch ap
- 利用栈实现算术表达式的求值
- Caffe中HDF5Data例子
- Springmvc静态资源配置
- hdu 6228 Tree
- 机房收费系统之结账
- 已知满二叉树的先序遍历,求其后序遍历