哈希表(开放定址法处理冲突)(1013)
Time limit(ms): 1000
Memory limit(kb): 10000
Submission: 4051
Accepted: 2177
Accepted
采用除留余数法(H(key)=key %n)建立长度为n的哈希表,处理冲突用开放定址法的线性探测。
Description
#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
int a[100];
memset(a, -1, sizeof(a));
int m;
cin >> m;
for (int i = 0; i < m; i++)
{
int b;
cin >> b;
int t = b%n;
if (a[t] == -1)
{
a[t] = b;
}
else
{
while (a[t] != -1)
{
t++;
if (t == n)
t = 0;
}
a[t] = b;
}
}//构建哈希表
int aim;
cin >> aim;
int count = 0;
int k = 0;//k用于标记是否查找成功
int t = aim%n;
while (1)
{
count++;
if (a[t] == aim)
{
cout << t << "," << count;
break;
}
if (a[t] == -1)
{
k = 1;
break;
}
t++;
}//哈希查找
if (k == 1)cout << "-1";
}
return 0;
}
第一行为哈希表的长度n; 第二行为关键字的个数; 第三行为关键字集合; 第三行为要查找的数据。
Input
如果查找成功,输出关键字所哈希表中的地址和比较次数;如果查找不成功,输出-1。
Output
|
13
11
16 74 60 43 54 90 46 31 29 88 77
16
|
Sample Input
3,1
|
|