2 xing1434422051 xing1434422051 于 2014.10.31 09:02 提问

哈希表判断冲突的条件有点不懂

void CreateHashList()
{ int i;
for(i=0; i<HASH_LENGTH;i++)
{ HashList[i].py="";
HashList[i].k=0;
HashList[i].si=0;
}
for(i=0;i<HASH_LENGTH;i++)
{ int sum=0;
int adr=(NameList[i].k)%M; //哈希函数
int d=adr;
if(HashList[adr].si==0) //如果不冲突
{ HashList[adr].k=NameList[i].k;
HashList[adr].py=NameList[i].py;
HashList[adr].si=1;
}
else //冲突

{ do
{ d=(d+NameList[i].k%10+1)%M; //伪随机探测再散列法处理冲突

sum=sum+1; //查找次数加1

}while (HashList[d].k!=0);
HashList[d].k=NameList[i].k;
一开始不是用循环给所有的Hashlist[i].k赋值为0啦吗,为什么后面判断冲突的循环终止的条件是while (HashList[d].k!=0);不是所有Hashlist[i].k赋值为0啦吗,那样不就是覆盖已经填有数据的地址吗

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!