直接上代码:
#include<stdio.h>
#include<stdlib.h>
#define NUM_DATA 8
#define NUM_HASHTABLE 11
typedef struct {
int data;
int flag;//记录查找所需次数
}HashTable; //哈希表节点
HashTable* CreateHashNode(int data, int flag); //构建哈希表节点
int HashFunction(int data); //哈希函数(除留余数法)
void CreateHashTable(HashTable** HT, int* datalist);//构建哈希表
void PrintLength(HashTable** HT); //计算ASL并输出
int main()
{
int datalist[NUM_DATA] = { 22,41,53,46,30,13,01,67 };
HashTable* HT[NUM_HASHTABLE] = { NULL };
CreateHashTable(HT, datalist);
PrintLength(HT);
return 0;
}
HashTable* CreateHashNode(int data, int flag)
{ //构建哈希表节点
HashTable* tmp;
tmp = (HashTable*)malloc(sizeof(HashTable));
tmp->data = data;
tmp->flag = flag;
return tmp;
}
int HashFunction(int data)
{ //哈希函数(除留余数法)
return (3 * data) % 11;
}
void CreateHashTable(HashTable** HT, int* datalist)
{ //构建哈希表
int position, flag;
for (int i = 0; i < NUM_DATA; i++) {
flag = 1;
position = HashFunction(datalist[i]);
while (HT[position] != NULL) {
//处理冲突
position++;
flag++;
}
HT[position] = CreateHashNode(datalist[i], flag);
}
}
void PrintLength(HashTable** HT)
{ //计算ASL并输出
int ASL = 0;
for (int i = 0; i < NUM_HASHTABLE; i++) {
if (HT[i] != NULL) {
ASL += HT[i]->flag;
}
}
ASL /= 8;
printf("%d", ASL);
}