voidInitHashTable(HashTable ht){assert(ht !=NULL);if(ht ==NULL){return;}for(int i =0; i < m; i++){
ht[i].next =NULL;}}
初始化测试:
HashTable ht;InitHashTable(ht);
3.查找
Node*Search(const HashTable ht,int key){int hi =H(key);//计算key的哈希值for(Node* p = ht[hi].next; p !=NULL; p = p->next){if(p->data.key== key){return p;}}returnNULL;}
查找测试:
HashTable ht;InitHashTable(ht);int arr[16]={13,5,7,1,2,9,28,25,6,11,10,15,17,23,34,19};for(int i =0; i <sizeof(arr)/sizeof(arr[0]); i++){Insert(ht, arr[i]);}Show(ht);
Node* p;for(int i =0; i <sizeof(arr)/sizeof(arr[0]); i++){
p =Search(ht, arr[i]);
p ==NULL?printf("%d没有找到\n", arr[i]):printf("%d找到了\n", arr[i]);}
p =Search(ht,100);
p ==NULL?printf("%d没有找到\n",100):printf("%d找到了\n",100);
4.插入(将key插入到哈希表ht中)
boolInsert(HashTable ht,int key){int hi =H(key);if(Search(ht, key)!=NULL)//key已经存在{returnfalse;}//插入key
Node* p =(Node*)malloc(sizeof(Node));assert(p !=NULL);
p->data.key = key;//头插
p->next = ht[hi].next;
ht[hi].next = p;returntrue;}
插入测试:
HashTable ht;InitHashTable(ht);int arr[16]={13,5,7,1,2,9,28,25,6,11,10,15,17,23,34,19};for(int i =0; i <sizeof(arr)/sizeof(arr[0]); i++){Insert(ht, arr[i]);}Show(ht);
5.打印
voidShow(HashTable ht){for(int i =0; i < m; i++){printf("哈希表值为%d的有", i);for(Node* p = ht[i].next; p !=NULL; p = p->next){printf("%d ", p->data.key);}printf("\n");}}