链地址的哈希表实现

链地址的哈希表实现

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值