怎么使用c语言实现哈希表

   2024-11-04 3700
核心提示:实现哈希表的基本步骤如下:定义哈希表的数据结构:包括哈希表大小、桶的数量、桶的结构等。实现哈希函数:将键映射到桶的索引。

实现哈希表的基本步骤如下:

定义哈希表的数据结构:包括哈希表大小、桶的数量、桶的结构等。实现哈希函数:将键映射到桶的索引。实现哈希表的操作函数:包括插入、查找、删除等操作。处理冲突:当多个键映射到同一个桶时,需要使用链表、开放寻址等方法来处理冲突。

以下是一个简单的使用C语言实现哈希表的示例代码:

#include <stdio.h>#include <stdlib.h>#include <string.h>#define TABLE_SIZE 10typedef struct Node {    char* key;    int value;    struct Node* next;} Node;Node* table[TABLE_SIZE];int hash_function(char* key) {    int hash = 0;    for (int i = 0; i < strlen(key); i++) {        hash += key[i];    }    return hash % TABLE_SIZE;}void insert(char* key, int value) {    int index = hash_function(key);    Node* new_node = (Node*)malloc(sizeof(Node));    new_node->key = key;    new_node->value = value;    new_node->next = table[index];    table[index] = new_node;}int search(char* key) {    int index = hash_function(key);    Node* current = table[index];    while (current != NULL) {        if (strcmp(current->key, key) == 0) {            return current->value;        }        current = current->next;    }    return -1; // key not found}void delete(char* key) {    int index = hash_function(key);    Node* current = table[index];    Node* prev = NULL;    while (current != NULL) {        if (strcmp(current->key, key) == 0) {            if (prev == NULL) {                table[index] = current->next;            } else {                prev->next = current->next;            }            free(current);            return;        }        prev = current;        current = current->next;    }}int main() {    insert("apple", 5);    insert("banana", 10);        printf("Value of apple: %d\n", search("apple"));    printf("Value of banana: %d\n", search("banana"));        delete("apple");        printf("Value of apple after deletion: %d\n", search("apple"));        return 0;}

上面的代码实现了一个简单的哈希表,包括插入、查找、删除操作。在这个示例中,哈希函数使用字符的ASCII码之和来计算哈希值,并使用链表处理冲突。你可以根据自己的需求来修改和扩展这个示例。

 
举报打赏
 
更多>同类维修大全
推荐图文
推荐维修大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号