哈希表的C语言实现
2013-12-03 08:02
204 查看
首先介绍一下什么是哈希表。同线性表、树一样,哈希表也是一种数据结构,理想情况下可以不需要任何比较,一次存取便能得到所查记录。所以它的优点就是查找特定记录的速度快。因为哈希表是基于数组的,所以创建后就难于扩展,而且不利于遍历数据。
下面是哈希表的C实现:
下面是哈希表的C实现:
/* 哈希表的C实现 查找使用的方法是“除留余数法”,解决冲突使用的方法是“链地址法”。 */ #include<stdio.h> #include<malloc.h> //malloc #include<string.h> //memset #define FALSE 0 #define TRUE 1 typedef int STATUS; //定义哈希表和基本数据节点 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) { NODE* pNode; if(NULL == pHashTbl) return NULL; if(NULL == (pNode = pHashTbl->value[data % 10])) return NULL; while(pNode){ if(data == pNode->data) return pNode; pNode = pNode->next; } return NULL; } //在哈希表中插入数据 STATUS insert_data_into_hash(HASH_TABLE* pHashTbl, int data) { NODE* pNode; if(NULL == pHashTbl) return FALSE; 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 TRUE; } if(NULL != find_data_in_hash(pHashTbl, data)) return FALSE; 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 TRUE; } //从哈希表中删除数据 STATUS delete_data_from_hash(HASH_TABLE* pHashTbl, int data) { NODE* pHead; NODE* pNode; if(NULL == pHashTbl || NULL == pHashTbl->value[data % 10]) return FALSE; if(NULL == (pNode = find_data_in_hash(pHashTbl, data))) return FALSE; if(pNode == pHashTbl->value[data % 10]){ pHashTbl->value[data % 10] = pNode->next; free(pNode); return TRUE; } pHead = pHashTbl->value[data % 10]; while(pNode != pHead ->next) pHead = pHead->next; pHead->next = pNode->next; } void main() { HASH_TABLE* hashtable=create_hash_table(); insert_data_into_hash(hashtable,1); //insert_data_into_hash(hashtable,4); insert_data_into_hash(hashtable,11); insert_data_into_hash(hashtable,21); NODE* node1=find_data_in_hash(hashtable,11); NODE* node2=find_data_in_hash(hashtable,21); printf("hashtable 1 : %d \n",hashtable->value[1]->data); if(hashtable->value[2]==NULL) printf("hashtable 2 is null\n"); printf("hashtable 1 : %d \n",node1->data); printf("hashtable 1 : %d \n",node2->data); delete_data_from_hash(hashtable,21); NODE* node3=find_data_in_hash(hashtable,21); if(node3==NULL) printf("21 is cancel\n"); else printf("hashtable 1 : %d \n",node3->data); }
相关文章推荐
- C语言实现哈希表(key为整形变量)
- C语言实现哈希表(key为字符型)
- 简单的哈希表实现 C语言
- C语言实现数据结构之哈希表
- c语言实现带LRU机制的哈希表
- 《数据结构》中的哈希表实现的例子(C语言)
- c语言实现最简单的哈希表(开放地址线性探测法)
- C语言实现哈希表查找算法
- C语言基于哈希表实现通讯录
- 哈希表例子(C语言实现)
- 哈希表系列:初探哈希,c语言实现
- PAT电话聊天狂人 哈希表实现查找与插入 C语言实现
- C语言实现哈希表(key为字符型)
- C语言实现哈希表HashTable及迅雷面试题哈希表桶结构代码
- 哈希表系列:初探哈希(二),c语言实现
- 哈希表的C语言实现
- 哈希表的一个C语言实现
- c语言实现数据结构中的哈希表
- 哈希表(散列表)—Hash表解决地址冲突 C语言实现
- 《数据结构》中的哈希表实现的例子(C语言)