-
Notifications
You must be signed in to change notification settings - Fork 0
/
hash_table.c
38 lines (30 loc) · 1.11 KB
/
hash_table.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#include <stdlib.h>
#include "hash_table_low.h"
#include "linked_list.h"
#include "hash_table.h"
hashTable createTable() {
hashTable hTable;
hTable.tableSize = 5;
hTable.loadFactor = 0;
hTable.maxLoad = 0.75;
hTable.minLoad = 0.25;
hTable.table = (linked_list**) calloc(hTable.tableSize, sizeof(linked_list*));
return hTable;
}
void addPair(char* key, int value, hashTable* hTable) {
hTable->loadFactor = insertPair(key, value, hTable->table, hTable->tableSize, hTable->loadFactor);
if(hTable->loadFactor > hTable->maxLoad) {
hTable->table = doubleSize(hTable->table, hTable->tableSize, hTable->loadFactor);
hTable->loadFactor = hTable->loadFactor / 2;
hTable->tableSize = hTable->tableSize * 2;
}
}
void deletePair(char* key, hashTable* hTable) {
hTable->loadFactor = removePair(key, hTable->table, hTable->tableSize, hTable->loadFactor);
if(hTable->loadFactor < hTable->minLoad && hTable->tableSize > 1) {
hTable->table = halveSize(hTable->table, hTable->tableSize, hTable->loadFactor);
hTable->loadFactor = hTable->loadFactor * 2;
hTable->tableSize = hTable->tableSize / 2;
}
}