算法学习 之链表

/**********开放定址哈希表的存储结构**********/ 
int hashsize[ ] = { 997, ... }; // 哈希表容量递增表一个合适的素数序列
typedef struct 
{
ElemType *elem; // 数据元素存储基址,
int count; // 当前数据元素个数
int sizeindex;// sizeindex为当前容量
} HashTable;
#define SUCCESS 1
#define UNSUCCESS 0
#define DUPLICATE -1
Status SearchHash (HashTable H, KeyType Key, int &p, int &c) 
{ // 在开放定址哈希表H中查找关键码为K的元素,
// 若查找成功,以p指示待查数据元素在表中位置,
// 并返回SUCCESS;否则,以p指示插入位置,
// 并返回UNSUCCESS, c用以计冲突次数,其初值
// 置零,供建表插入时参考
p = Hash(Key);  //求得哈希地址
while ( H.elem[p].key != NULLKEY &&K != H.elem[p].key) 
// 该位置中填有记录并且关键字不相等
collision(p, ++c); // 求得下一探查地址p
if ((Key== H.elem[p].key) return SUCCESS; 
// 查找成功,p返回待查数据元素位置
else return UNSUCCESS; // 查找不成功,p返回的是插入位置
} // SearchHash

通过调用查找算法实现了开放定址哈希表的插入操作。

Status InsertHash (HashTable &H, Elemtype e) 
{ // 查找不成功时插入数据元素e到开放定址哈希表H
// 中,并返回OK;若冲突次数过大,则重建哈希表
c = 0;
if ( HashSearch ( H, e.key, p, c ) == SUCCESS )
return DUPLICATE;  //表中已有与e有相同关键字的元素
else if ( c < hashsize[H.sizeindex]/2 ) 
{  // 冲突次数c未达到上限,(阀值c可调)
H.elem[p] = e; ++H.count; return OK; // 插入e
} 
else RecreateHashTable(H);     // 重建哈希表
} // InsertHash
 

转载于:https://my.oschina.net/edwin0/blog/896163

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值