//散列表查找代码实现
#define HASHTABLEKEYDEFAULT 0;//键值的默认值
#define HASHTABLESize 12;//表的大小
#define
typedef struct _HASHTABLE{
int* pHash;//表地址
int nCount;//表的数量
}HASHTABLE,*PHASHTABLE;
void InitHash(PHASHTABLE pTable){
//初始化散列表
pTable->pHash=new int(HASHTABLESize);
for(int i=0;i<HASHTABLESize;i++){
pTable->pHash[i]=HASHTABLEKEYDEFAULT;
}
}
int GetHashKey(int nValue){
//获取散列表的Key值试试
return nValue % HASHTABLESize;
}
void InsertHash(PHASHTABLE pTable,int nValue){
int nKey=0;
nKey =GetHashKey(nValue);//通过值获取到对应的键值
while(pTable->pHash[nKey]!=HASHTABLEKEYDEFAULT){
//有数据进行定位无数据的位置
nKey=GetHashKey(nKey+1);//继续查找下一个键值(开放定址法->线性探测法,其中还有二次探测法和随机探测法)
}
pTable->pHash[nKey]=nValue;//最后保存起来
}
int SearchHash(PHASHTABLE pTable,int nValue,int*RetKey){
//通过对应的值查找键值
*RetKey=GetHashKey(nValue);//通过值获取对应的键
while(pTable->pHash[*RetKey]!=nValue){
*RetKey=GetHashKey(*RetKey+1);//继续查找下一个键值(开放定址法->线性探测法,其中还有二次探测法和随机探测法)
if(pTable->pHash[*RetKey]==HASHTABLEKEYDEFAULT||
GetHashKey(nValue)==*RetKey){//如果查找到最后一个,或者又回查找到原来的键值表示失败
return -1;//表示查找失败
}
}
return 0;//查找成功,此时*RetKey 返回了pHash中对应的索引值
}
数据结构之散列表冲突的解决方法
最新推荐文章于 2023-03-22 15:39:15 发布