哈希拉链法(哈希桶)

  昨天写了哈希的开放定址法的博客,今天我们要说的是拉链法,还有一个名字叫哈希桶。哈希桶要做的就是,之前我们用的开放定址法,通过将数据映射到数组中来实现哈希。这里每个数组的位置只能存放一个数据,如果冲突的话会继续往下找找到空的位置然后放进去,但是其实大家都能感觉出来上一个代码很简单,也很扯,感觉实现起来完全不行,不要说海量数据了, 有点数据感觉就不行了,虽然可以扩容但是也是一件很复杂的事情。这里我们要实现的是将以前的数组变成一个指针数组,这里每个数据存放的都是一个指针,这样发生冲突的话,就不必要再去找下一个位置,每发生一次冲突就在当前位置的最后一个数据后边挂上另一个数据。

 

 typedef int KeyType;

typedef int ValueType;

 

typedef struct HashNode

{

KeyType _key;

ValueType _value;

struct HashNode* _next;

}HashNode;

 

typedef struct HashTable

{

HashNode** _tables;

size_t _size;

size_t _N;

}HashTable;

size_t HashFunc(KeyType key, size_t N)

{

return key%N;

}

 

也就是说每个位置放得都是一个结构体,结构体放着两个数据,一个是存放的数据,一个是next指针。用来寻找下一个元素。

HashNode** _tables;这里创建的是一个指针数组,也就是创建了一个数组,数组中的所有位置的元素都是一个指针。

HashNode* BuyHashNode(KeyType key, ValueType value)

{

HashNode *NewNode = NULL;

NewNode = (HashNode*)malloc(sizeof(HashNode));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值