//判断素数
int Isprime(int num)
{
if (num <= 1 || num % 2 == 0)
return 0;
if (num == 2)
return 1;
for (int i = 3;i * i <= num;i += 2)
return 0;
return 1;
}
//让哈希表的大小为素数,素数>=num
int nextprime(int num)
{
while (!Isprime(num))
num++;
return num;
}
Hashtable initializetable(int tablesize,int mintablesize)//哈希表初始化
{
Hashtable H;
int i;
if (tablesize < mintablesize)
{
printf("Table size too small\n");
return NULL;
}
//分配表
H = (Hashtable)malloc(sizeof(struct Hashtbl));
if (H == NULL)
{
printf("out of space\n");
}
H->tablesize = nextprime(tablesize);//设置表的大小为一素数
H->Thelists =(List*) malloc(sizeof(List) * H->tablesize);
if (H->Thelists == NULL)
{
printf("out of space\n");
}
//分配头节点
for (i = 0;i < H->tablesize;i++)
{
H->Thelists[i] = (List)malloc(sizeof(struct Listnode));
if (H->Thelists[i] == NULL)
printf("out of space\n");
else
H->Thelists[i]->next = NULL;
}
return H;
}
为什么哈希表大小要用素数