C语言实现--哈希表查找的算法,采用线性探测法处理冲突。

Miette ·
更新时间:2024-11-10
· 558 次阅读

此代码可以正常运行

#include #include //算法7.10 哈希表的查找 //- - - - -开放地址法哈希表的存储表示- - - - - #define m 16 //哈希表的表长 #define NULLKEY 0 //单元为空的标记 struct HashTable{ int key; //关键字项 // InfoType otherinfo; //其他数据项 }; //为哈希表查找的算法,采用线性探测法处理冲突。 // 【算法实现】 int H(int key) { int result; result=key%13; return result; } int SearchHash(HashTable HT[],int key){ //在哈希表HT中查找关键字为key的元素,若查找成功,返回哈希表的单元标号,否则返回-1 int H0=H(key); //根据哈希函数H(key)计算哈希地址 int Hi; if (HT[H0].key==NULLKEY) return -1; //若单元H0为空,则所查元素不存在 else if (HT[H0].key==key) return H0; //若单元H0中元素的关键字为key,则查找成功 else{ for(int i=1;i<m;++i){ Hi=(H0+i)%m; //按照线性探测法计算下一个哈希地址Hi if (HT[Hi].key==NULLKEY) return -1; //若单元Hi为空,则所查元素不存在 else if (HT[Hi].key==key) return Hi; //若单元Hi中元素的关键字为key,则查找成功 }//for return -1; }//else }//SearchHash void main() { int result; int a[16]={-1,14,1,68,27,55,19,20,84,79,23,11,10,-1.-1.-1}; HashTable HT[m]; for(int i=0;i<16;i++) { HT[i].key=a[i]; } result=SearchHash(HT,55); if(result!=-1) { printf("在第%d个位置找到\n",result+1); } else { printf("未找到\n"); } } September_Y 原创文章 89获赞 89访问量 8849 关注 私信 展开阅读全文
作者:September_Y



哈希表 哈希 C语言 算法 线性

需要 登录 后方可回复, 如果你还没有账号请 注册新账号