7.哈希表查找(开放地址法)找
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//哈希表查找
//开放地址法
#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);
}