C++哈希表实现

来源:互联网 发布:qq浏览器mini java版 编辑:程序博客网 时间:2024/05/22 10:46

#include<stdio.h>#include<stdlib.h>#include<time.h>#define HASHLENGTH 10struct node{int data;struct node *next;};struct node hash[HASHLENGTH];typedef struct node * HashNode;int Hash(int k){return k%HASHLENGTH;}void CreateHash(){for(int i=0; i<HASHLENGTH; i++){hash[i].data = i;hash[i].next = NULL;}}void PrintOneLink(struct node h){HashNode ptr = h.next;while(ptr != NULL){printf("%d ", ptr->data);ptr = ptr->next;}printf("\n");}void PrintHash(){for(int i=0; i<HASHLENGTH; i++){printf("hash[%d]:", i);PrintOneLink(hash[i]);}}bool SearchHash(int data){int p = Hash(data);HashNode ptr = hash[p].next;while(ptr != NULL && ptr->data!=data){ptr = ptr->next;}if(ptr == NULL) return false;return true;}int InsertHash(int data){if(SearchHash(data)==true){return 0;}else{int p = Hash(data);HashNode hn = (HashNode)malloc(sizeof(struct node));hn->data = data;hn->next = NULL;if(hash[p].next == NULL){hash[p].next = hn;}else{hn->next = hash[p].next;hash[p].next = hn;}}return 1;}void DeleteHash(int data){if(SearchHash(data)==true){int p = Hash(data);HashNode ptr = hash[p].next;HashNode prePtr = ptr;if(ptr->data == data){hash[p].next = ptr->next;free (ptr);}else{while(ptr != NULL && ptr->data != data){prePtr = ptr;ptr = ptr->next;}prePtr->next = ptr->next;free(ptr);}}else{printf("Don't have the number\n");}}void HashTest(){CreateHash();int data = -99;srand( (unsigned)time(NULL) );for(int i=0; i<30; i++){data = rand();InsertHash(data);}PrintHash();printf("Enter a number to delete:");while(scanf("%d", &data) != EOF){DeleteHash(data);PrintHash();printf("Enter a number to delete:");}}int main(){HashTest();return 0;}


原创粉丝点击