Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- typedef struct{
- void* data;
- char* key;
- }hashElem;
- typedef struct{
- hashElem** hashArray;
- unsigned int size;
- unsigned int cap;
- unsigned int current;
- }HashMap;
- unsigned long djb2(char *str){
- unsigned long hash = 5381;
- unsigned int c;
- while ((c = *str++))
- hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
- return hash;
- }
- unsigned int hash(unsigned int cap, char* key){
- unsigned long hash = djb2(key);
- unsigned int i = hash % cap;
- return i;
- }
- void* search(HashMap* map, char* key){
- unsigned int i;
- unsigned int hvalue = hash(map->cap,key);
- for(i=0;i<map->cap;i++){
- unsigned int new_hvalue=(hvalue+i)%map->cap;
- if(!map->hashArray[new_hvalue]) return NULL;
- else if(map->hashArray[new_hvalue]->key == key){
- return map->hashArray[new_hvalue]->data;
- }
- }
- return NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement