散列表查找实现
来源:互联网 发布:如何判断存在sql注入 编辑:程序博客网 时间:2024/04/27 10:46
1. 散列表算法实现
结构定义
#define HASHSIZE 12typedef struct{ int *elem; /* 数据元素存储基址,动态分配数组 */ int count; /* 当前数据元素个数 */}HashTable;int m = 0; /* 散列表表长,全局变量 */
初始化
/* 初始化散列表 */Status InitHashTable(HashTable *H){ int i; m = HASHSIZE; H->count = m; H->elem = (int *)malloc(m*sizeof(int)); for(i=0;i<m;i++) H->elem[i] = NULLKEY; return OK;}
散列函数
/* 散列函数 */int Hash(int key){ return key % m; /* 除留余数法 */}
插入
/* 插入关键字进散列表 */void InsertHash(HashTable *H, int key){ int addr = Hash(key); while (H->elem[addr]!=NULLKEY) addr = (addr+1) % m; /* 开放定址法的线性探测 */ H->elem[addr] = key;}
查找
/* 散列表查找关键字 */Status SearchHash(HashTable H, int key, int *addr){ *addr = Hash(key); while (H.elem[*addr]!=key) { *addr = (*addr+1) % m; if (H.elem[*addr] == NULLKEY || *addr == Hash(key)) { /* 如果循环到原点 */ return UNSUCCESS; /* 说明关键字不存在 */ } } return Success;}
性能分析
没有冲突的情况下,散列查找的时间复杂度是O(1)。
散列查找的平均查找长度取决于以下几种因素:
1. 散列函数是否均匀
2. 处理冲突的方法
3. 散列表的装填因子。所谓的装填因子α=填入表中的记录个数/散列表长度,α越大,产生冲突的可能性就越大。散列表的平均查找长度取决于装填因子的大小,而不是个数的多少,所以将散列表开的比查找范围大一些,性能会更高。
阅读全文
0 0
- 散列表查找实现
- 算法--查找--散列表查找
- 开散列表及其查找算法的实现
- 闭散列表及其查找算法的实现
- 散列表查找
- 散列表查找概述
- 散列表的查找
- 散列表查找
- 查找 之 散列表查找(哈希表)
- Java查找算法(五): 散列表查找
- ClistCtrl虚拟列表实现按键查找
- QT实现文件查找显示列表功能
- 散列表 散列查找
- 查找--- 哈希表( 散列表)
- 散列表查找(哈希表)
- 查找算法—散列表
- 散列表(哈希表)查找
- 查找(5)---散列表
- 数据库的数据库及表的修改和删除基础知识
- GNU C attribute section的一个使用例子
- IT运维平台算法背后的两大“神助攻”
- mybatis1-mybatis介绍
- MyBatis逆向工程自动生成代码
- 散列表查找实现
- 教你防范勒索软件:加强网络环境的6条建议
- 各种选项卡
- 设计模式-单例模式
- 设计模式之单例模式
- Jmeter后置处理器-正则表达式提取器
- adaBoost 源码
- MySQL引擎详解
- MPAndroidChart开源图表库之饼状图