题目描述
定义哈希函数为H(key) = key%11。输入表长(大于、等于11),输入关键字集合,用二次探测再散列构建哈希表,并查找给定关键字。探测时如遇到已存在于哈希表的相同数字,则新数字不存入。
输入
测试次数t
每组测试数据格式如下:
哈希表长m、关键字个数n
n个关键字
查找次数k
k个待查关键字
输出
对每组测试数据,输出以下信息:
构造的哈希表信息,数组中没有关键字的位置输出NULL
对k个待查关键字,分别输出:
0或1(0—不成功,1—成功)、比较次数、查找成功的位置(从1开始)
样例输入1
1
12 10
22 19 21 8 9 30 33 4 41 13
4
22
15
30
41
样例输出1
22 9 13 NULL 4 41 NULL 30 19 8 21 33
1 1 1
0 3
1 3 8
1 6 6
样例输入2
1
79 79
8 5 26 26 12 12 16 28 13 17 26 16 7 29 27 23 3 29 23 28 21 9 18 19 11 27 0 6 5 10 15 5 8 3 1 20 15 17 19 28 26 7 6 3 7 25 18 2 16 11 22 7 13 10 19 24 7 19 22 4 22 7 9 22 2 2 12 17 12 23 7 8 23 13 12 0 0 22 24
26
17
4
16
24
17
18
5
3
25
17
25
0
9
25
1
1
27
4
5
7
16
29
6
24
14
12
样例输出2
23 12 13 29 26 5 16 28 8 27 17 7 19 9 21 6 18 NULL 20 10 4 NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL NULL 22 NULL NULL NULL NULL NULL NULL 0 NULL 24 25 15 11 1 2 3
1 4 11
1 8 21
1 2 7
1 7 73
1 4 11
1 6 17
1 1 6
1 5 79
1 7 74
1 4 11
1 7 74
1 7 71
1 4 14
1 7 74
1 5 77
1 5 77
1 4 10
1 8 21
1 1 6
1 4 12
1 2 7
1 5 4
1 6 16
1 7 73
0 9
1 1 2
代码示例
注意下面代码的标注的地方**
#include <iostream>
using namespace std;
#define INITIALIZE -1
class HashTable
{
private:
int size; // 表长
int* hashTable; // 哈希表,用于存值
public:
HashTable();
~HashTable();
int hash(int num);
void outPut();
void searchValue(int t);
};
HashTable::HashTable()
{
int n; // 关键字个数
cin >> size >> n;
hashTable = new int[size];