首页 > 编程知识 正文

c语言实现哈希表数据结构

时间:2023-05-06 10:33:50 阅读:193764 作者:1697

#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#define NULLKEY -32768typedef struct HashTable{int * pElem;int count;}HT,*PHT;void init(PHT pHashTable);bool insert(PHT pHashTable,int data);int Hash(int data);void printHashTable(PHT pHashTable);int search(PHT pHashTable,int data);int main(){HT hashTable;//定义一个哈希表printf("======初始化哈希表=====n");init(&hashTable);printf("======插入=====n");if(insert(&hashTable,1)){printf("插入成功n");}else{printf("插入失败n");}if(insert(&hashTable,2)){printf("插入成功n");}else{printf("插入失败n");}if(insert(&hashTable,3)){printf("插入成功n");}else{printf("插入失败n");}if(insert(&hashTable,4)){printf("插入成功n");}else{printf("插入失败n");}printf("======打印=====n");printHashTable(&hashTable);printf("======查找=====n");printf("数据为1的地址是:%dn",search(&hashTable,1));}//根据数据找到地址//查找失败时返回-1int search(PHT pHashTable,int data){int add=Hash(data);while(pHashTable->pElem[add]!=data){add=(add+1)%3;if(add==Hash(data)||pHashTable->pElem[add]==NULLKEY){printf("查找失败n");return -1;}}return add;}//打印哈希表void printHashTable(PHT pHashTable){int i;for(i=0;i<pHashTable->count;i++){printf("%dn",pHashTable->pElem[i]);}}//哈希函数int Hash(int data){return data%3;}//插入bool insert(PHT pHashTable,int data){int add=Hash(data);while(pHashTable->pElem[add]!=NULLKEY){add=(add+1)%3;if(add==Hash(data)){//一轮下来都没有找到位置,则说明申请的空间里面全都被插入元素了return false;}}pHashTable->pElem[add]=data;return true;}//初始化哈希表void init(PHT pHashTable){int size = 3;//哈希表的大小为3pHashTable->pElem = (int *)malloc(sizeof(int)*size);if(pHashTable->pElem==NULL){printf("动态内存申请失败n");exit(-1);}pHashTable->count=size;int i;for(i=0;i<size;i++){pHashTable->pElem[i]=NULLKEY;}return;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。