下面是一個簡單的C語言實現的hash表示例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 100
typedef struct Node {
char key[50];
int value;
struct Node* next;
} Node;
Node* hashtable[SIZE];
unsigned int hash(const char* key) {
unsigned int hash = 0;
for (int i = 0; key[i] != '\0'; i++) {
hash = hash * 31 + key[i];
}
return hash % 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("banana", 10);
printf("Value of apple is %d\n", get("apple"));
printf("Value of banana is %d\n", get("banana"));
return 0;
}
這個例子中,我們使用一個固定大小的數組hashtable
來保存hash表的數據。我們使用一個簡單的hash函數來計算key的hash值,并用該值來確定key在數組中的位置。在插入數據時,我們首先根據key計算hash值,然后創建一個新的節點,并將其插入到對應位置的鏈表中。在查找數據時,我們同樣根據key計算hash值,然后遍歷對應位置的鏈表,找到對應的節點并返回其值。