欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

链地址的哈希表实现

发布时间:2025/7/14 编程问答 42 豆豆
生活随笔 收集整理的这篇文章主要介绍了 链地址的哈希表实现 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

链地址的哈希表实现

1.类型定义

1 typedef struct Node { 2 RcdType r; 3 struct Node *next; 4 } Node; 5 typedef struct { 6 Node **rcd;   7 int size; // 哈希表容量 8 int count;   // 当前表中含有的记录个数 9 int (*hash)(KeyType key, int); // 函数指针变量,用于选取的哈希函数 10 } HashTable;

2.初始化

1 Status InitHash(HashTable &H, int size, int (*hash)(KeyType,int)) { 2 //初始化哈希表 3 int i; 4 if(NULL==(H.rcd=(Node**)malloc(sizeof(Node)*size))) return OVERFLOW; 5 for(i = 0;i<size;i++) 6 H.size = size; 7 H.count = 0; 8 H.hash = hash; 9 return OK; 10 }  

3.查找

1 Node* SearchHash(HashTable &H, int key){ 2 int p = H.hash(key,H.size); 3 Node *np; 4 for(np = H.rcd[p];np!=NULL;np=np->next){ 5 if(np->r.key = key) return np; 6 } 7 return NULL; 8 } 9 10 11 //哈希函数 12 int hash(int key, int size) { 13 return 3*key%size; 14 } 15

 

 

4.插入

1 Status InsertHash(HashTable &H, RcdType e){ 2 int p; 3 Node *np; 4 if((np=SearchHash(H, e.key))==NULL){ 5 p = H.hash(e.key, H.size); 6 np = (Node*)malloc(sizeof(Node)); 7 if(np==NULL) return OVERFLOW; 8 np->r = e; 9 np->next = H.rcd[p]; 10 H.rcd[p]= np; 11 H.count++; 12 return OK; 13 } 14 return error; 15 }

 

 

 

 

转载于:https://www.cnblogs.com/linwx/articles/7655603.html

《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读

总结

以上是生活随笔为你收集整理的链地址的哈希表实现的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。