C语言实现哈希表

来源:互联网 发布:马来西亚人均收入 知乎 编辑:程序博客网 时间:2024/06/04 23:10
#include<stdio.h>#include<malloc.h>#include<string.h>typedef struct _NODE{int data;struct _NODE* next;}NODE;typedef struct _HASH_TABLE{NODE* value[10];}HASH_TABLE;HASH_TABLE* create_hash_table(){HASH_TABLE* pHashTbl = (HASH_TABLE*)malloc(sizeof(HASH_TABLE));memset(pHashTbl, 0, sizeof(HASH_TABLE));return pHashTbl;}NODE* find_data_in_hash(HASH_TABLE* pHashTbl, int data){if(NULL ==  pHashTbl){return NULL;}NODE* pNode = pHashTbl->value[data % 10];if(NULL == pNode){return NULL;}while(pNode){if(data == pNode->data){return pNode;}pNode = pNode->next;}return NULL;}int insert_data_into_hash(HASH_TABLE* pHashTbl, int data){NODE* pNode;if(NULL == pHashTbl){return 0;}if(NULL == pHashTbl->value[data % 10]){pNode = (NODE*)malloc(sizeof(NODE));memset(pNode, 0, sizeof(NODE));pNode->data = data;pHashTbl->value[data % 10] = pNode;return 1;}if(NULL != find_data_in_hash(pHashTbl, data)){return 0;}pNode = pHashTbl->value[data % 10];while(NULL != pNode->next){pNode = pNode->next;}pNode->next = (NODE*)malloc(sizeof(NODE));memset(pNode->next, 0, sizeof(NODE));pNode->next->data = data;return 1;}int delete_data_from_hash(HASH_TABLE* pHashTbl, int data){NODE* pHead;NODE *pNode;if(NULL == pHashTbl || NULL == pHashTbl->value[data % 10]){return 0;}pNode = find_data_in_hash(pHashTbl, data);if(NULL == pNode){return 0;}if(pNode == pHashTbl->value[data % 10]){pHashTbl->value[data % 10] = pNode->next;goto final;}pHead = pHashTbl->value[data % 10];while(pNode != pHead ->next){pHead = pHead->next;}pHead->next = pNode->next;final:free(pNode);return 1;}void main() {HASH_TABLE *ht = create_hash_table();int flag = insert_data_into_hash(ht, 1);printf("insert status: %d\n", flag);flag = insert_data_into_hash(ht,11);printf("insert status: %d\n", flag);flag = insert_data_into_hash(ht,111);printf("insert status: %d\n", flag);flag = insert_data_into_hash(ht,11);printf("insert status: %d\n", flag);NODE *node = find_data_in_hash(ht, 111);if(node) {printf("%d has been found!\n",node->data);}node = find_data_in_hash(ht, 20);if(node) {printf("%d has been found!\n",node->data);}flag = delete_data_from_hash(ht, 111);printf("delete status: %d\n", flag);}


运行结果:

insert status: 1

insert status: 1

insert status: 1

insert status: 0

111 has been found!

delete status: 1

0 0
原创粉丝点击