DS哈希查找与增补(表尾插入)
题目描述
给出一个数据序列,建立哈希表,采用求余法作为哈希函数,模数为11,哈希冲突用链地址法和表尾插入
如果首次查找失败,就把数据插入到相应的位置中
实现哈希查找与增补功能
输入
第一行输入 n n n,表示有 n n n个数据
第二行输入 n n n个数据,都是自然数且互不相同,数据之间用空格隔开
第三行输入 t t t,表示要查找 t t t个数据
从第四行起,每行输入一个要查找的数据,都是正整数
输出
每行输出对应数据的查找结果,每个结果表示为数据所在位置 [ 0 , 11 ) [0,11) [0,11)和查找次数,中间用空格分开
输入样例:
6
11 23 39 48 75 62
6
39
52
52
63
63
52
输出样例:
6 1
error
8 1
error
8 2
8 1
参考代码:
#include <iostream>
#include <vector>
#include <queue>
#include <list>
#include <forward_list>
#include <algorithm>
using namespace std;
int main() {
int n, t;
cin >> n;
int *arr = new int[n];
list<int> Hash[11];
for (int i = 0; i < n; ++i) {
cin >> arr[i];
Hash[arr[i] % 11].push_back(arr[i]);
}
cin >> t;
while (t--) {
int num;
cin >> num;
if (find(Hash[num % 11].begin(), Hash[num % 11].end(), num) == Hash[num % 11].end()) {
Hash[num % 11].push_back(num);
cout << "error" << endl;
} else {
cout << num % 11 << ' '
<< distance(Hash[num % 11].begin(), find(Hash[num % 11].begin(), Hash[num % 11].end(), num)) + 1
<< endl;
}
}
return 0;
}