반응형
배열을 이용하여 memory 를 잡아준 뒤,
Single Linked List로 hash를 사용하는 코드이다.
#define MAX_TABLE_SIZE 1000
typedef struct Node {
char data[5];
struct Node *prev;
} Node;
Node a[MAX_TABLE_SIZE];
Node *hashTable[MAX_TABLE_SIZE];
int arr_idx = 0;
unsigned long myHash(const char *str)
{
unsigned long hash = 5381;
int c;
while (c = *str++)
hash = (hash * 7 * c) % MAX_TABLE_SIZE;
return hash;
}
Node* myAlloc(void)
{
return &a[arr_idx++];
}
void copyStr(char *dest, char *src, int n)
{
for(int i = 0; i < n; i++)
*dest++ = *src++;
}
int compareStr(char *dest, char *src, int n)
{
for(int i = 0; i < n; i++)
if(*dest++ != *src++)
return -1;
return 0;
}
int main()
{
char input[7] = "abcdefg";
unsigned int key;
Node *p;
key = (unsigned int)myHash(input);
p = myAlloc();
copyStr(p->data, input, 7);
p->prev = hashTable[key];
hashTable[key] = p;
//...
//search
key = myHash(input);
for (Node *start = hashTable[key]; start != NULL; start = start->prev)
if(!compareStr(start->data, input, 7))
printf("find \n");
// reset
arr_idx = 0;
for (int i = 0; i < MAX_TABLE_SIZE; i++)
hashTable[i] = 0x0;
return 0;
}
반응형
'Programming > Algorithm' 카테고리의 다른 글
링크드리스트의 모든 것 linked list (0) | 2021.07.02 |
---|---|
머지소트(merge sort) (0) | 2021.06.16 |
동적할당 대신 배열을 사용해 시간 줄이기(feat. 코딩테스트) (1) | 2021.06.14 |
그레이 코드(gray code) 와 이진 코드(binary code) 변환 (0) | 2020.10.11 |
호너의 법칙, 진법 변환 (feat. Honer's method) (0) | 2020.01.06 |