您的位置:首页 > 其它

一个简单的Hash表算法 zz

2005-10-14 22:19 459 查看
一个简单的Hash表算法

关键字是一个整数。

#define M 100 //表长度,一般选择为素数值
int t[M]; //Hash table
void makenull(int t[]); //Hash表的初始化,为0表示还没有填入元素
{
int i;
for(i=0;i<M;i++)
t[i]=0;
}

int search(int t[],int k) //Hash表的搜索
{
int i,j;
i=h(k); //求Hash数
for(j=0;j<M&&t[(i+j)%M]!=k&&t[(i+j)%M]!=0;j++); //三种情况:发生碰撞;未找到;找到
i=(i+j)%M;
if(t[i]==k) return i;
return -1;
}

int insert(int t[],int k)
{
int i,j;
i=h(k);
for(j=0;j<M&&t[(i+j)]%M!=k&&t[(i+j)%M>0;j++);
i=(i+j)%M;
if(t[i]<=0) //has been deleted or is empty
t[i]=k;
return 0;
}
return 1;
}

int delete1(int t[],int k)
{
int i,j;
i=h[k];
for(j=0;j<M&&t[(i+j)]%M!=k&&t[(i+j)%M!=0;j++);
i=(i+j)%M;
if(t[i]==k) //has this element
{
t[i]=-1;
return 0;
}
return 1;
}

-----------------------------------------------------------------------------------------------------------------------------
以上算法是我从baidu上搜到的,我按照教材例子重写如下,赠强了代码的简洁性:
#define p 97 //p是不大于M的最大素数,除留余数法构造Hash函数: h(key)=key%p (p<m)
int SearchHash(int t[],int k, int &p) //Hash表的搜索
{
p=h(k); //求Hash数
int j = 0;
while( t[p]!=k && t[p]!=NULLKEY && j<M) //发生碰撞,采用开放定址法-线性探测再散列
p=(p+j)%M;
if( t[p] == k) return SUCCESS;
else return FAILURE; //没有找到,找到一个空位置或者j=m
}
int InsertHash(nt t[],int k, int &p)
{
int p;
if( search(t[M], k, p) ) return DUPLICATED; //k已存在
else if(t[p] = NULLKEY) t[p] = k; return OK; //插入到空位置
else return HASHISFULL;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: