第一行输入闭散列表的长度m,除留余数法的模p,和关键码的个数n
第二行输入n个整型关键码
第三行输入三个待查整型值
输出描述:
输出三行,每行格式为:
如果找到待查值,输出找到待查值的位置,如果没找到,输出“none”,并将待查值插入到散
列表中,如果散列表满,则输出“full”,每个待查值占一行
输入样例:
11 11 9
2 6 8 9 13 17 10 12 20
3 7 11
输出样例:
none
none
full
#include<iostream>
using namespace std;
const int MAX=20;
int ht[MAX] = {0};//散列表
int m;//表长
int p;//模
int Count = 0;
int H(int k)//Hash函数
{
return k % p;
}
void Insert(int k)//插入函数
{
int i, j = H(k);
i = j;
while (ht[i] != 0)
{
if (ht[i] == k) return;
else i = (i + 1) % MAX;
}
ht[i] = k;
Count++;
}
bool isFull()
{
if (Count==m) return true;
return false;
}
void HashSearch(int k)//查找函数
{
int i, j = H(k);
i = j;
while (ht[i] != 0)
{
if (ht[i] == k)
{
cout << i<<endl;
return;
}
i = (i + 1) % MAX;
}
if (!isFull())
{
cout << "none"<<endl;
Insert(k);
}
else
cout << "full"<<endl;
}
int main()
{
int n;
cin >>m>>p>>n;
int a[MAX];
for (int i = 0; i<m; i++)
ht[i] = 0;
for (int i=0;i<n;i++)
cin >> a[i];
for (int i = 0; i < n; i++)
Insert(a[i]);
int k;
for (int i = 0; i < 3; i++)
{
cin>>k;
HashSearch(k);
}
return 0;
}