7.哈希表查找(开放地址法)找

//哈希表查找
//开放地址法
#include
#define MaxSize 10
typedef int KeyType;

typedef struct
{
KeyType key;
int si;
}HashTable;

void CreateHT(HashTable ht[],KeyType a[],int n,int m,int p)
{
int i,d,cnt;
for(i = 0;i < m;i++)
{
ht[i].key = 0;
ht[i].si = 0;
}
for(i = 0;i < n;i++)
{
cnt = 1;
d = a[i]%p;
if(ht[d].key == 0)
{
ht[d].key = a[i];
ht[d].si = cnt;
}
else
{
do
{
d = (d + 1)%m;
cnt++;
}
while(ht[d].key != 0);
ht[d].key = a[i];
ht[d].si = cnt;
}
}
}

void DispHT(HashTable ht[],int n,int m)
{
int i;
double avg;
cout << "i: ";
for(i = 0;i < m;i++)
cout << i << " ";
cout << endl;
cout << "key: ";
for(i = 0;i < m;i++)
cout << ht[i].key << " ";
cout << endl;
cout << "si: ";
for(i = 0;i < m;i++)
cout << ht[i].si << " ";
cout << endl;
avg = 0;
for(i = 0;i < m;i++)
avg += ht[i].si;
avg = avg/n;
cout << "平均查找长度:ASL(" << n << ")=" << avg << endl;
}

void main()
{
HashTable ht[MaxSize];
KeyType a[] = {19,1,23,14,55,20,84,27,68,11,10,77};
int n = 12,m = 19,p = 13;
CreateHT(ht,a,n,m,p);
DispHT(ht,n,m);
}

相关文档
最新文档