#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#define NULLKEY -32768
typedef 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的地址是:%d\n",search(&hashTable,1));
}
//根据数据找到地址
//查找失败时返回-1
int 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("%d\n",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;//哈希表的大小为3
pHashTable->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;
}
c语言实现哈希表数据结构
最新推荐文章于 2023-06-14 18:19:42 发布