최대 1 분 소요

hash 관련 살짝 정리 ㅡ.ㅡ;

#include <stdio.h>
 
 #define MAX_CNT 30000
 
 typedef struct HASH_NODE{
     char *str;
     int key;
 }hashNode;
 
 hashNode myhash[MAX_CNT];
 
 long long my_hash(char * str)
 {
     long long ret = 0;
 
     int i  = 0;
     while(str[i] != 0)
     {
         ret = (ret << 5) + str[i++] - 'a' +1;
     }
 
     return ret;
 }
 
 void add_hash(char * str)
 {
     long long key = my_hash(str);
     int k_cnt = key % MAX_CNT;
     int cnt = 0;
     while(cnt++ != MAX_CNT)
     {
         if(myhash[k_cnt].key == 0)
         {
             myhash[k_cnt].key = key;
             break;
         }else if(myhash[k_cnt].key != key)
         {
             k_cnt = (k_cnt + 1)% MAX_CNT;
         }
     }
 }
 
 int find_hash(char * str)
 {
     long long key = my_hash(str);
     int k_cnt = key % MAX_CNT;
     int cnt = 0;
     int ret;
     while(cnt++ != MAX_CNT)
     {
         if(myhash[k_cnt].key == key)
             return k_cnt;
         else if(myhash[k_cnt].key == 0)
             return -1;
         else
             k_cnt = (k_cnt +1) %MAX_CNT;
 
     }
 
 }
 
 void main(void)
 {
     hashNode tmp;
     tmp.str = '\0';
     tmp.key = 0;
 
     for(int i = 0; i < MAX_CNT; i++)
         myhash[i] = tmp;
 
     add_hash("abcd");
     add_hash("cdef");
     add_hash("qwer");
 
     printf("%d \n", find_hash("abcd"));
     printf("%d \n", find_hash("ccef"));
     printf("%d \n", find_hash("qwer"));
 
 }
 
 

\