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
- C语言实现哈希表
- 哈希表例子(C语言实现)
- C语言实现的数据结构之------哈希表
- C语言实现哈希表查找算法
- 链栈 C语言实现
- 地球 c语言实现
- C语言实现堆栈
- c语言实现计算器
- TrimLeft C语言实现
- C语言实现有限状态机
- 迪杰斯特拉 C语言实现
- C语言实现FIR
- C语言实现有限状态机
- C语言实现双链表
- C语言实现析构器
- C语言实现:万年历
- C语言实现有限状态机
- 二叉排序树 C语言实现
- OpenCV常用函数——图像采样
- 大数据实验增加,导致虚拟机的根目录/ 磁盘空间不够,会带来各种问题, 使用gpated工具解决!!
- 欢迎使用CSDN-markdown编辑器
- Android AsyncTask介绍
- .bash_profile和.bashrc的区别(如何设置生效)
- C语言实现哈希表
- 操作系统课程设计1 Linux下编译c++文件
- HDU 题目分类
- <canvas>和<svg>的优劣势
- 算法拾遗
- OS X 强制退出
- Android自定义控件(二) 滑动开关
- HTML学习笔记001 2016.3.4
- 别说你会AFNetworking3.0/NSURLSession