创建一个开散列表,散列函数为除留余数法如下:hash(x) = x % 11,散列表中有8个元素,要求从键盘读入这8个散列元素,采用开散列即拉链法处理冲突,计算该开散列表的平均查找长度。
提示:创建一个指针数组用来表示开散列。
输入规范
输入8个散列元素,中间以空格隔开
输出规范输出该比散列表的平均查找长度,占一行 输入样例
7 6 92 77 3 15 28 45 输出样例
1.25
#include<iostream>
#include<stdio.h>
#include<memory.h>
#define maxsize 100
using namespace std;
struct node
{ node *next;
int data;
};
node a[11];
int find(int x)
{
int time=1;
node *p;
p=&a[x%11];
while(p->data!=x) {
p=p->next ;time++;
}
return time;
}
int main()
{ int i,n,j,sum=0;
float h;
int tem[8];
node *s;
for(i=0;i<11;i++)
a[i].data=-1;
for(i=0;i<8;i++)
{ cin>>n;
tem[i]=n;
j=n%11;
if(a[j].data==-1)
a[j].data=n;
else
{ s=new(node);
s->data=a[j].data;
s->next=a[j].next;
a[j].next=s;
a[j].data=n;
}
}
for(i=0;i<8;i++)
sum+=find(tem[i]);
h=sum/8.0;
cout<<h<<endl;
return 0;
}