DS哈希查找—线性探测再散列

题目描述

 定义哈希函数为H(key) = key%11。输入表长(大于、等于11),输入关键字集合,用线性探测再散列构建哈希表,并查找给定关键字。

输入

 测试次数t

每组测试数据为:

哈希表长m、关键字个数n

n个关键字

查找次数k

k个待查关键字

输出

对每组测试数据,输出以下信息:

构造的哈希表信息,数组中没有关键字的位置输出NULL

k个待查关键字,分别输出:010—不成功,1—成功)、比较次数、查找成功的位置(从1开始)

样例输入

1

12 10

22 19 21 8 9 30 33 4 15 14

4

22

56

30

17

样例输出

22 30 33 14 4 15 NULL NULL 19 8 21 9

1 1 1

0 6

1 6 2

0 1

思路:

每次输入一个值value的时候,用这个值%11得到key

然后从hash表中的key位置开始往后判断

如果位置是空的,则将value存进去

如果不空,则继续判断下一个位置,直到有位置为空可以放下value为止

要注意的是,假设hash的长度是m,那么在key到m之间可能所有位置都满了,那么这时候就要重开一个循环从0位置开始判断,判断位置0到位置key之间是否有空位置,有的话要放进去

code:

#include 
using namespace std;

void test()
{
    int m,n;
    cin>>m>>n;
    int *hashh;
    hashh = new int [m];
    for(int i=0;i>value;
        key=value%11;
        for(int j=key;j>search_num;
    for(int i=0;i>value;
        key=value%11;
        flag=0;
        for(int j=key;j> t;
	while (t--)
	{
        test();
	}

	return 0;
}

 

你可能感兴趣的:(OJ)