哈希查找
//使用哈希函数:H(k)=3*k MOD length,并采用开放定址法处理冲突。试对输入的关键字序
列构造哈希表,哈希表长度为 length,
//求等概率情况下查找成功的平均查找长度,并设计构造哈希表的完整的算法。
#include"malloc.h" /* malloc()等 */
#include"stdlib.h" /* exit() */
#include"stdio.h"
#include"math.h"
#define EQ(a,b) ((a)==(b))
#define SUCCESS 1
#define UNSUCCESS 0
#define NULLKEY -1 /*哈希表无元素时值为-1*/
typedef int ElemType;
int length;
typedef struct
{
ElemType *elem; /* 数据元素存储基址,动态分配数组 */
int count; /* 当前数据元素个数 */
}HashTable;
void InitHashTable(HashTable *H)
{ /* 操作结果: 构造一个长度为 length 的哈希表,length 为全局变量 */
int i;
(*H).count=0; /* 当前元素个数为 0 */
(*H).elem=(ElemType*)malloc(length*sizeof(ElemType));
if(!(*H).elem)
exit(0); /* 存储分配失败 */
for(i=0;i<length;i++)
(*H).elem[i]=NULLKEY; /* 未填记录的标志 */
}
unsigned Hash(ElemType K)
{ /* 一个简单的哈希函数*/
ElemType add;
add=K;
add=(3*add)%(length);
// printf("%d ",add);
return add;
}
void collision(int *p) /*线性探测再散列 */
{ /* 开放定址法处理冲突 */
评论10