哈希查找方法

已知哈希表长度为11,哈希函数为H(key)=key%11,随机产生待散列的小于50的8个元素,同时采用线性探测再散列的方法处理冲突。任意输入要查找的数据,无论是否找到均给出提示信息。

 

int func(int value)

{

return value % Max; /哈希函数 /

}

 

int search(int key) /自定义函数实现哈希查找 /

{

int pos, t;

pos = func(key); /哈希函数确定位置 /

t = pos; /t 存放确定出的位置 /

while (hashtable[t] != key && hashtable[t] != - 1)/如果该位置不等于要查找的关键字且不为空 /

{

t = (t + 1) % Max; /利用线性探测求出下一个位置 /

if (pos == t)

/如果经多次探测又回到原来用哈希函数求出的位置,则说明要查找的数不存在 /

return - 1;

}

if (hashtable[t] == - 1) /如果探测的位置是-1,则说明要查找的数不存在 /

return NULL;

else

return t;

}

 

void creathash(int key) /自定义函数创建哈希表 /

{

int pos, t;

pos = func(key); /哈希函数确定元素的位置 /

t = pos;

while (hashtable[t] != - 1) /如果该位置有元素存在,则进行线性探测再散列 /

{

t = (t + 1) % Max;

if (pos == t)

/如果冲突处理后确定的位置与原位置相同,则说明哈希表已满 /

{

printf("哈希表已满\n");

return ;

}

}

hashtable[t] = key; /将元素放入确定的位置 /

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值