#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#include<time.h>
#include<ctype.h>
#define MAX_VALUE 5
typedef struct hashNode{
char *key;
char *value;
int flag;
}Hash;
typedef struct table{
Hash *hashTable[MAX_VALUE];
int size;
}HashTable;
HashTable *pHashTableHead = NULL;
//初始化hash表
void initHashTable(){
pHashTableHead = (HashTable *)malloc(sizeof(HashTable));
if(pHashTableHead == NULL){
printf("init hash table is failed\n");
exit(0);
}
for(int i=0; i<MAX_VALUE; i++){
Hash *pHashNode = (Hash *)malloc(sizeof(Hash));
pHashNode->key = "\0";
pHashNode->value = "\0";
pHashNode->flag = 0;
pHashTableHead->hashTable[i] = pHashNode;
}
pHashTableHead->size = 0;
}
//获取字符串长度
int getStrLen(char *k){
int len = 0;
while(*k){
k += 1;
len++;
}
return len;
}
//计算每个字符的asc码值之和并取余
int hashKey(char *k){
int len = getStrLen(k);
int hash = 0;
for(int i=0; i<len; i++){
hash += toascii(k[i]);
}
return hash%MAX_VALUE;
}
//查询数据
char *find(char *k){
int index = hashKey(k);
int pos = index;
while(pHashTableHead->hashTable[pos]->key != k){
pos = (++pos)%MAX_VALUE;
}
return pHashTableHead->hashTable[pos]->value;
}
//插入数据
void insert(char *k, char *v){
if(pHashTableHead->size >= MAX_VALUE){
printf("hash table is full \n");
exit(0);
}
int index = hashKey(k);
if(pHashTableHead->hashTable[index]->key == k){
printf("key is exist\n");
exit(0);
}
int pos = index;
while(pHashTableHead->hashTable[pos]->flag == 1){
pos = (++pos)%MAX_VALUE;
}
Hash *pHead = pHashTableHead->hashTable[pos];
pHead->key = k;
pHead->value = v;
pHead->flag = 1;
pHashTableHead->size++;
}
int main(){
initHashTable();
char *key01 = "abcde";
char *value01 = "aaaaaaa";
char *key02 = "abdce";
char *value02 = "bbbbbbb";
char *key03 = "acdeb";
char *value03 = "ccccccc";
char *key04 = "adceb";
char *value04 = "ddddddd";
char *key05 = "aebcd";
char *value05 = "eeeeee";
insert(key01, value01);
insert(key02, value02);
insert(key03, value03);
insert(key04, value04);
insert(key05, value05);
char *val = find(key04);
printf("%s\n", val);
return 0;
}
C语言 开放寻址法HASH表存储简单实现
最新推荐文章于 2021-05-25 05:04:32 发布