在C語言中實現hash表需要先定義一個結構體來表示hash表的節點,然后定義一個數組來存儲這些節點,每個節點包含一個鍵值對,以及指向下一個節點的指針。下面是一個簡單的示例代碼:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TABLE_SIZE 100
typedef struct Node {
char key[100];
int value;
struct Node* next;
} Node;
Node* hashTable[TABLE_SIZE];
unsigned int hash(const char* key) {
unsigned int hash = 0;
while (*key) {
hash = (hash * 31) + *key++;
}
return hash % TABLE_SIZE;
}
void insert(const char* key, int value) {
unsigned int index = hash(key);
Node* newNode = (Node*)malloc(sizeof(Node));
strcpy(newNode->key, key);
newNode->value = value;
newNode->next = hashTable[index];
hashTable[index] = newNode;
}
int get(const char* key) {
unsigned int index = hash(key);
Node* current = hashTable[index];
while (current != NULL) {
if (strcmp(current->key, key) == 0) {
return current->value;
}
current = current->next;
}
return -1;
}
int main() {
insert("apple", 5);
insert("orange", 10);
insert("banana", 3);
printf("apple: %d\n", get("apple"));
printf("orange: %d\n", get("orange"));
printf("banana: %d\n", get("banana"));
printf("grape: %d\n", get("grape"));
return 0;
}
在這個示例中,我們定義了一個 hash 函數來計算鍵的哈希值,并使用鏈地址法來解決哈希沖突。我們可以通過 insert 函數來插入鍵值對,通過 get 函數來獲取鍵對應的值。在 main 函數中演示了如何使用這個簡單的hash表。