简单实现hash存储

来源:互联网 发布:命令行进入linux mysql 编辑:程序博客网 时间:2024/04/30 23:43

使用RSHash进行hash处理

#include <stdio.h>#include <stdlib.h>#define MAX_NUM 100struct person{char *name;int age;};struct store_person{struct person *per;struct store_person *next;const char *key;};struct store_person *stuff;unsigned int RSHash(const char *str);void hash_set(const char *key, struct person *per);struct person* hash_get(const char *key);void freesource();int main(int argc, char *argv[]){    stuff = (struct store_person*)malloc(sizeof(struct store_person) * MAX_NUM);if(stuff == NULL)return -1;struct person pvalue1;pvalue1.name = "haha";pvalue1.age = 18;hash_set("key1", &pvalue1);struct person pvalue2;pvalue2.name = "xixi";pvalue2.age = 20;hash_set("key2", &pvalue2);struct person pvalue3;pvalue3.name = "lala";pvalue3.age = 12;hash_set("key3", &pvalue3);struct person *p = hash_get("key2");printf("person->name=%s and person->age=%d\n", p->name,p->age);freesource();    return 0;}unsigned int RSHash(const char *str)  {      unsigned int b = 378551;      unsigned int a = 63689;      unsigned int hash = 0;         while (*str)      {          hash = hash * a + (*str++);          a *= b;      }         return (hash & 0x7FFFFFFF);  }  void hash_set(const char *key, struct person *per){int pos = RSHash(key) % MAX_NUM;struct store_person *store = &stuff[pos];if(store->key == NULL){store->key = key;store->per = per;printf("store ok ,position is %d\n", pos);return;}}struct person* hash_get(const char *key){int pos = RSHash(key) % MAX_NUM;struct store_person *store = &stuff[pos];if(store->key != NULL){return (store->per);}}void freesource(){free(stuff);stuff = NULL;printf("free ok\n");}

有关hash函数,请参考前一篇

0 0