数据结构哈希表

本文介绍了一个使用哈希表进行数据查找的应用实例。通过定义哈希函数和冲突解决策略,实现了一种高效的查找方法。文章详细展示了如何构建哈希表,并通过线性探测再散列来解决哈希冲突。

输入n,n个数,a

判断a有没在这组数内


#include <iostream>
#include <cstdio> 
#define M 10000007	//哈希表长 
#define P 10000007	//P是大写 
using namespace std;

//构造哈希的函数(除留余数法):H(key)=key MOD P
//处理哈希冲突(开放定址法):Hi=(H(key)+di) MOD M,di等于1,2,3,...,m-1(线性探测再散列) 
 
//数组下标,仅仅允许int类型作为数组下标,不能是long long 
long long hs[M];
bool judge[M];

inline int hash(long long key)	//哈希函数,返回的是地址 
{
	int addr=key%P;		//构造哈希的函数:H(key)=key MOD P  (P<=M,且一般为质数) 
	while(judge[addr]==1&&hs[addr]!=key)	 
		addr=(addr+1)%P;	//处理哈希冲突,向前找有空的位置 
	//跳出循环情况为:judge[addr]!=1或hs[addr]==key
	judge[addr]=1;
	return addr; 
}
int main()
{
	int n;
	long long key;
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%lld",&key);
		hs[hash(key)]=key;
	}
	
	scanf("%lld",&key);
	if(hs[hash(key)]==key)
		cout<<"yes"<<endl;
	else
		cout<<"no"<<endl; 
	return 0;
} 


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值