哈希函数:
影响哈希冲突的原因:
引起哈希冲突的一个原因可能是:哈希函数设计不够合理。
哈希函数设计原则:
哈希函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址时,其值域必须在0到m-1之间
哈希函数计算出来的地址能均匀分布在整个空间中
哈希函数应该比较简单
解决哈希冲突两种常见的方法是:闭散列和开散列
闭散列闭散列:也叫开放地址法,当发生哈希冲突时,如果哈希表未被装满,说明在哈希表中必然还有空位置,那么可以把key存放到表中 “下一个” 空位中去
首先定义结构体
typedef int Keytype;
typedef int Valtype;
enum Status//定义状态
{
EM,//空
EX,//存在
DL,//删除
};
typedef struct HashNode
{
Keytype _key;
Valtype _val;
Status _status;
}HashNode;
typedef struct Hashtable
{
HashNode *_table;
size_t _size;
size_t _N;
}Hashtable;