数据结构-怀化学院期末题(490)

哈希查找

题目描述:

实现哈希查找。要求根据给定的哈希函数进行存储,并查找相应元素的存储位置。本题目使用的哈希函数为除留取余法,即H(key)=key%m,其中m为存储空间,冲突处理方法采用开放定址法中的线性探测再散列,即Hi=(H(key)+i)/%m,0<=i<=m-1。
输入:
输入包含若干个测试用例,第一行为测试用例个数。每个测试用例占3行,第一个为元素个数m,第二行为m个元素值,即需要进行散列存储的元素个数,同时也是存储空间个数(空间位置从0开始存储),第三行为需要查找的元素。
输出:
对每一测试用例,分别用两行输出,第一行输出所有的元素,要求按存储地址从0开始输出,用空格隔开,第二行输出需要查找的元素在数组中的位置,即对应数组中的下标。

输入样例:

1
5

2 4 1 7 9
7

输出样例:

9 1 2 7 4
3

代码;

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef pair PII;
const int N = 1e5 + 10;

int main(){
	int k;
	cin >> k;
	while(k --){
		map mp;
		int m,x;
		cin >> m;
		for(int i = 0;i < m;i ++){
			cin >> x;
			int t = x % m;
			while(mp[t]) t = (t + 1) % m;
			mp[t] = x;
		}
		int num,ans;
		cin >> num ;
		for(int i = 0;i < m;i ++){
			cout << mp[i] << ' ';
			if(mp[i] == num){
				ans = i;
			}
		}
		cout << endl;
		cout << ans << endl;
	}
	return 0;
}

 

你可能感兴趣的:(数据结构)