1.链地址法
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define maxSize 100
typedef struct ListNode
{
int element;
struct ListNode* next;
}ListNode;
typedef ListNode* List;
typedef struct
{
int tableSize;
List* theLists;
}HashTable;
int IsPrime(int n)
{
int i;
if (n <= 1)
return 0;
for (i = 2; i <= sqrt(n); ++i)
if (n%i == 0)
return 0;
return 1;
}
int NextPrime(int n)
{
int i = n - 1;
if (n <= 2)
{
printf("Error");
}
else
{
while (!IsPrime(i))
--i;
}
return i;
}
int Hash(int key, int p)
{
return key % p;
}
HashTable* Initialize(int tableSize)
{
/*第一步创建表*/
HashTable* H = (HashTable*)malloc(sizeof(HashTable));
H->tableSize = NextPrime(tableSize);/*实际能够映射到的范围为不大于表长的最大素数*/
H->theLists = (List*)malloc(H->tableSize * sizeof(List));
/*第二步初始化表中头结点*/
int i;
for (i = 0; i < H->tableSize; +