开放寻址法之线性探查——hash实现
不怎么明白原理,参照一个网友的代码,自己写了一下,算是练手吧:
#include <iostream>
using namespace std;
const int m = 19;
int T[30];
void hasn_init()
{
for (int i = 0; i < 30; ++i)
{
T[i] = -1;
}
}
int hash_fun(int value)
{
return value;
}
int hash_fun(int value, int i)
{
return (hash_fun(value) + i) % m;
}
int hash_insert(int value)
{
int key = hash_fun(value,0);
for (int i = 0; i < m; ++i)
{
if (T[key] == -1)
{
T[key] = value;
return key;
}
key = hash_fun(value,i);
}
return -1;
}
int hash_search(int value)
{
int key = hash_fun(value,0);
for (int i = 1; i < m; ++i)
{
if (T[key] == value )
{
return key;
}
if (T[key] == -1)
{
return -1;
}
key = hash_fun(value,i);
}
return -1;
}
void hash_delete(int value)
{
int result = hash_search(value);
if (result != -1)
{
T[result] = -1;
}
else
{
cout << "error" << endl;
}
}
void hash_print()
{
for (int i = 0; i < 30;++i)
{
if (T[i] != -1)
{
cout << i << " : " << T[i] << endl;
}
}
}
int main()
{
int a[]={5,28,19,15,20,33,12,17,10};
hasn_init();
for (int i = 0; i < sizeof(a)/sizeof(*a); ++i)
{
hash_insert(a[i]);
}
hash_print();
hash_delete(100);
hash_delete(5);
hash_print();
}


浙公网安备 33010602011771号