数据结构之哈希表
来源:互联网 发布:软件类企业安全教育 编辑:程序博客网 时间:2024/06/18 07:00
#include <stdio.h>#include <stdlib.h>#include <memory.h>#define N 10 //hash表内存大小#define FALSE 0#define TRUE 1typedef struct _Node{int nData ; struct _Node * next ;}Node ;typedef struct _Hash_Table{Node * value[N] ; //指针数组}Hash_table;//创建hash表Hash_table *create_hash_table(){ Hash_table * pHash = (Hash_table*)malloc(sizeof(Hash_table)) ;memset(pHash,0,sizeof(Hash_table)) ;return pHash ;} //在Hash表中寻找数据Node* find_data(Hash_table* pHash ,int nData){Node* pNode ;if(NULL == pHash) //若哈希表为空{return NULL ;}if(NULL == (pNode = pHash->value[nData%N])) //若哈希表中数组没有该成员,进入if条件句{return NULL ;}while(pNode) //当该结构体指针不为空时{if(nData == pNode->nData ){return pNode ; //返回找到数据的结构体的指针}pNode = pNode->next ;}return NULL ;}//在Hash表中添加数据bool insert_data(Hash_table * pHash ,int nData){ Node * pNode ;if(NULL == pHash) //判断传入指针是否有效 {return FALSE ;}if(NULL ==pHash->value[nData%N]) //判断指针数组中有没有该成员,若没有则进入if条件句中{pNode = (Node*)malloc(sizeof(Node)) ;memset(pNode,0,sizeof(Node)) ; //清空pNode指向的结构体pNode->nData = nData ;pHash->value[nData%N] = pNode ;return TRUE;}if(NULL != find_data(pHash,nData)) //查找到该数据{return FALSE ;}pNode = pHash->value[nData%N] ; //指向该元素所在的链表while(NULL != pNode->next){pNode = pNode->next ;}pNode->next = (Node*)malloc(sizeof(Node)) ;memset(pNode->next,0,sizeof(Node)) ;pNode->next->nData = nData ;return TRUE ;} //在Hash表中删除数据bool delete_data(Hash_table* pHash , int nData){Node* pHead ;Node* pNode ;if(NULL == pHash || NULL == pHash->value[nData%N]){return FALSE ;}if(NULL == (pNode = find_data(pHash,nData))) //并未找到该数据{return FALSE ;}if(pNode == pHash->value[nData%N]) //若找到该数据结点并且是数组成员首个结构体{pHash->value[nData%N] = pNode->next ;free(pNode) ;return TRUE ;}pHead = pHash->value[nData%N] ;while(pNode != pHead->next) // 遍历找出所要删除的数据位置{pHead = pHead->next ;}pHead->next = pNode->next ;free(pNode) ;return TRUE ;}//打印哈希表void show_hash_table(Hash_table* pHash) { Node* pNode = NULL; for(int i = 0; i<N; i++) // 从第一个哈希表元素开始打印,直到最后一个元素 { printf("value[%d]:",i) ; for(pNode=pHash->value[i] ; NULL != pNode; pNode=pNode->next) // 打印下标为i的哈希表元素及该位置所链接的节点 { printf("%d ",pNode->nData) ; } printf("\n") ; }} int main(){Hash_table* my_Hash_table ;my_Hash_table = create_hash_table() ; //创建哈希表char a[N] ={23,12,67,42,78,91,56,8,32,28}; //添加数据bool blTemp ;for(int i = 0;i<N;i++){blTemp = insert_data(my_Hash_table,a[i]) ;if(blTemp == FALSE){printf("对不起 %d 添加失败\n",a[i]) ;}}//打印哈希表show_hash_table(my_Hash_table) ;printf("\n") ; ////查找数据//Node* pNode ;//pNode = find_data(my_Hash_table,81) ;//if(pNode == NULL)//{//printf("未找到该数据!\n");//}//else//{//printf("成功找到:%d\n",pNode->nData) ;//}//删除数据blTemp = delete_data(my_Hash_table,12);if(blTemp == FALSE){printf("对不起 删除失败!\n") ;}else{printf("成功删除!\n") ;} //打印哈希表show_hash_table(my_Hash_table) ;return 0 ;}
阅读全文
0 0
- 数据结构之哈希表
- 数据结构之哈希表
- 数据结构之哈希表(4)
- 数据结构之哈希表
- 数据结构之哈希表
- 数据结构之哈希表
- 数据结构之哈希表
- 数据结构之哈希表
- 数据结构之哈希表
- 数据结构之哈希表
- 7.数据结构之哈希表
- 数据结构之 哈希表
- 数据结构之哈希表
- 计蒜客:数据结构之哈希表
- 数据结构算法之哈希表
- 数据结构之哈希表
- 数据结构之哈希表
- 数据结构之哈希表
- 习题 3.2 存款利息的计算。有1000元,想存5年,可按以下5种办法存:
- 《Effective Java 学习笔记 第二章》
- vim命令详解
- 51单片机中断
- Hadoop中的Context使用
- 数据结构之哈希表
- 2017 Multi-University Training Contest
- C语言中volatile关键字的作用
- ECMA-262 V7.0 中关于数据类型和值的说明
- 序列化和反序列化的简单理解
- Axios
- Q-learning算法
- iOS基类Model--BaseModel
- oracle 存储过程初学案例