1078. Hashing (25)

本文介绍了一个基于散列表的二次探测再散列算法实现。该算法通过使用二次探测来解决散列表中的冲突问题,并确保即使在散列表中存在冲突的情况下也能找到合适的存储位置。代码实现了散列表的构建过程,包括散列函数、二次探测处理冲突的方法等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    考查散列表的二次探测再散列

#include <iostream>
#include <cstdio>
#include <vector>

using namespace std;

bool isPrime(int n){
	if(n <= 1) return false;

	for(int i = 2; i*i <= n; ++i){
		if(n%i == 0) return false;
	}

	return true;
}

int main(){
	int msize, n;
	scanf("%d%d", &msize, &n);

	while(!isPrime(msize)) ++msize;

	vector<bool> used(msize, false);

	for(int i = 0; i < n; ++i){
		int key, h;
		scanf("%d", &key);
		h = key%msize;

		if(i) printf(" ");

		if(used[h]){
			int i;
			for(i = 0; i < msize; ++i){
				if(!used[(key+i*i)%msize]){
					used[(key+i*i)%msize] = true;
					printf("%d", (key+i*i)%msize);
					break;
				}
			}
			
			if(i == msize) printf("-");
		}
		else{
			used[h] = true;
			printf("%d", h);
		}
	}


	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值