哈希表简介
前面几篇文章分别介绍了静态查找,包含顺序查找和有序查找;还介绍了动态查找的一部分,包含二叉排序树和平衡二叉树。
其实在树结构中的动态查找里,还包含红黑树(C++ STL中的map set就是基于红黑树实现的)、多态查找树即B树(多用于数据库查找和IO系统,可减少索引次数)。
树结构的动态查找,其优势在于可以输出有序数据。
而哈希查找的优势在于,能够快速检索。
什么是哈希表?
数据元素即关键字和存放关键字的地址之间存在一定的函数关系:关键字地址 = f(关键字),这叫做哈希函数。通过哈希函数来存放的数据序列叫做哈希表。
哈希表的关键在于:
存储——通过哈希函数获取地址,存放数据。
查找——通过哈希函数获取地址,找到数据。
哈希表代码
以下代码的哈希函数采用除留余数法
,处理散列冲突的方法为开放定址法
。
对于长度为m的哈希表,
除留余数法:f(key) = key%p (p <= m)
开放定址法:f(key) = (addr+1)%m
代码如下:
include "iostream"
using namespace std;
#define MAX_SIZE 8
#define MOD_P 7
#define NULLKEY -1000
typedef struct
{
int *elem;
int count;
}HashTable;
bool InitHash(HashTable* H)
{
H->count = MAX_SIZE;
H->elem = (int*