还有怎么计算散列表拉链法的平均查找长度
#include<fstream>
#include<iostream>
#include <string>
#include<cstdlib>
using namespace std;
const int MAX = 100;
struct Node
{
int data;
Node* next;
};
struct Node1
{
Node* first;
};
typedef struct
{
string name;
string phone;
string add;
int length;
int count1;
}telephone;
class Hash
{
public:
Hash();//构造默认函数
~Hash() ;//析构函数
void Hashphone(telephone tele[]);//以名字构造哈希表 (开散列法)
void SearchName(string Sname); //查找名字(拉链法)
void ASL(telephone tele[]);//平均查找长度
private:
int len;
int b[MAX];
Node1* a[MAX];
};
void Hash::Hashname(telephone tele[])
{
int b,n,y;
for (int i = 0; i < MAX; i++)
{
a[i] = new Node1;
a[i]->first = NULL;
tele[i].count1=0;
}
Node *p = new Node;
for (int i = 0; i < len; i++)
{
n=tele[i].phone.size();
b=0;
b=b+tele[i].name[0]+tele[i].name[1]+tele[i].name[2]-200;
p->data =b;
p->next = NULL;
y = (b% 4);
p->next = a[y]->first;
a[y]->first = p;
}
for(int i=0;i<MAX;i++)
{
int b=0,extra;
b=b+tele[i].name[0]+tele[i].name[1]+tele[i].name[2]-200;
extra = (b% 4);
if (a[extra]->first == NULL)
{
tele[i].count1=0;
}
else
{
Node*q = new Node;
q = a[extra]->first;
while (q->data != b && q->next != NULL)
{
q = q->next;
tele[i].count1++;
}
if (q->data ==b)
cout << tele[i].count1 << endl;
}
}
}