Write a function that creates a hash table.
- Prototype:
hash_table_t *hash_table_create(unsigned long int size);
- where
size
is the size of the array
- where
- Returns a pointer to the newly created hash table
- If something went wrong, your function should return
NULL
Write a hash function implementing the djb2 algorithm.
- Prototype:
unsigned long int hash_djb2(const unsigned char *str);
- You are allowed to copy and paste the function from this page
Write a function that gives you the index of a key.
- Prototype:
unsigned long int key_index(const unsigned char *key, unsigned long int size);
- where
key
is the key - and
size
is the size of the array of the hash table
- where
- This function should use the
hash_djb2
function that you wrote earlier - Returns the index at which the key/value pair should be stored in the array of the hash table
- You will have to use this hash function for all the next tasks
Write a function that adds an element to the hash table.
- Prototype:
int hash_table_set(hash_table_t *ht, const char *key, const char *value);
- Where
ht
is the hash table you want to add or update the key/value to key
is the key.key
can not be an empty string- and
value
is the value associated with the key.value
can be an empty string
- Where
- Returns:
1
if it succeeded,0
otherwise - In case of collision, add the new node at the beginning of the list
Write a function that retrieves a value associated with a key.
- Prototype:
char *hash_table_get(const hash_table_t *ht, const char *key);
- where
ht
is the hash table you want to look into - and
key
is the key you are looking for
- where
- Returns the value associated with the element, or
NULL
ifkey
couldn’t be found
Write a function that prints a hash table.
- Prototype:
void hash_table_print(const hash_table_t *ht);
- where
ht
is the hash table
- where
- You should print the key/value in the order that they appear in the array of hash table
- Order: array, list
- Format: see example
- If
ht
is NULL, don’t print anything
Write a function that deletes a hash table.
- Prototype:
void hash_table_delete(hash_table_t *ht);
- where
ht
is the hash table
- where
In PHP, hash tables are ordered. Wait… WAT? How is this even possible?
Before you continue, please take a moment to think about it: how you would implement it if you were asked to during an interview or a job. What data structures would you use? How would it work?
For this task, please:
- Read PHP Internals Book: HashTable
- Use the same hash function
- Use these data structures: