Advertisement
Guest User

xDDD

a guest
Jul 17th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.90 KB | None | 0 0
  1. typedef struct{
  2.    void* data;
  3.    char* key;
  4. }hashElem;
  5.  
  6. typedef struct{
  7.    hashElem** hashArray;
  8.    unsigned int size;
  9.    unsigned int cap;
  10.    unsigned int current;
  11. }HashMap;
  12.  
  13.  
  14. unsigned long djb2(char *str){
  15.     unsigned long hash = 5381;
  16.     unsigned int c;
  17.  
  18.     while ((c = *str++))
  19.         hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
  20.  
  21.     return hash;
  22. }
  23.  
  24. unsigned int hash(unsigned int cap, char* key){
  25.     unsigned long hash = djb2(key);
  26.     unsigned int i = hash % cap;
  27.     return i;
  28. }
  29.  
  30. void* search(HashMap* map, char* key){
  31.     unsigned int i;
  32.     unsigned int hvalue = hash(map->cap,key);
  33.     for(i=0;i<map->cap;i++){
  34.         unsigned int new_hvalue=(hvalue+i)%map->cap;
  35.         if(!map->hashArray[new_hvalue]) return NULL;
  36.         else if(map->hashArray[new_hvalue]->key == key){
  37.            return map->hashArray[new_hvalue]->data;
  38.         }
  39.     }
  40.     return NULL;
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement