基本上随地都可以找到的函数,作为记录和简单分析而发表
#include "stdio.h"
#define MAX 13 //设置最大值,也是表长
int H(int key) //哈希函数--除留余数法
{
return (key%MAX);
}
/*
输入19 14 23 01 68 20 84 27 55 11 形成的hash表
0 1 2 3 4 5 6 7 8 9 10 11 12
14 1 68 27 55 19 20 84 23 11
*/
int thread(int key, int m,int addr[])
{
int i,j;
i=H(key); //取得余数
if(addr[i]==key) return i; // 已存在m,返回其位置
i--; //为了保证全部遍历完
j=(i+1)%m;
while(addr[j]!=key&&addr[j]!=0)
{
if(j!=i)
j=(j+1)%m;
else return -1; //循环开始时i=j,若结束时i=j表示完全遍历了一
}
if(addr[i]==key) return j; //在哈希表中找到key返回其所在位置
if(addr[j]==0) {addr[j]=key;return j;} //新插入
}