设元素的关键码为37、25、14、36、49、68、57、11。哈希哈数Hash(x)=x%11。
Hash(37)=4;
Hash(25)=3;
Hash(14)=3;
Hash(36)=3;
Hash(49)=5;
Hash(68)=2;
Hash(57)=2;
Hash(11)=0;
代码如下:
HashBuckt.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
//开散列法又叫链地址法(开链法):首先对关键码集合用散列函数计算散列地址,
//具有相同地址的关键码归于同一集合,每一集合称为一个桶,每个桶中的元素通过一个单链表链接起来
//各链表的头结点存储在哈希表中。
typedef int HTKeyType;
//typedef int HTVauleType;
typedef struct HashNode//链表
{
HTKeyType _key;
//HTVauleType _vaule;
struct HashNode *_next;
}HashNode;
typedef struct HashTable
{
HashNode **_tables;//指针数组
size_t size;//数组里有效数据个数
size_t _capacity;//数组容量
}HashTable;
void HashTableInit(HashTable *ht, size_t capacity);//初始化
void HashDestory(HashTable *ht);//销毁
int HashInsert(HashTable *ht, HTKeyType key);//插入
void CheckCapacity(HashTable *ht);//检查容量
int HashFunc(HashTable * ht, HTKeyType key);//哈希函数
int GetNextPrime(HashTable *ht);//找到下一个素数表大小
HashNode *HashFind(HashTable *ht, HTKeyType key);//查找
int HashRemove(HashTable *ht, HTKeyType key);//删除
void HashPrint(HashTable *ht);//打印
HashNode *BuyHashNode(HTKeyType key);//创建链表结点
HashBuckt.c
#include"HashBuckt.h"
#include<assert.h><