哈希表实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以,下面是一个简单的哈希表实现的 C 代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define TABLE_SIZE 10 typedef struct { char *key; int value; } Entry; typedef struct { Entry **entries; } HashTable; HashTable* createHashTable() { HashTable* hashTable = malloc(sizeof(HashTable)); hashTable->entries = calloc(TABLE_SIZE, sizeof(Entry*)); return hashTable; } int hashCode(char *key) { int hash = 0; for (int i = 0; i < strlen(key); i++) { hash += key[i]; } return hash % TABLE_SIZE; } void insert(HashTable* hashTable, char *key, int value) { int index = hashCode(key); Entry* entry = malloc(sizeof(Entry)); entry->key = strdup(key); entry->value = value; if (hashTable->entries[index] == NULL) { hashTable->entries[index] = entry; } else { // Handle collision: Linear probing int newIndex = (index + 1) % TABLE_SIZE; while (hashTable->entries[newIndex] != NULL) { newIndex = (newIndex + 1) % TABLE_SIZE; } hashTable->entries[newIndex] = entry; } } int get(HashTable* hashTable, char *key) { int index = hashCode(key); if (hashTable->entries[index] != NULL && strcmp(hashTable->entries[index]->key, key) == 0) { return hashTable->entries[index]->value; } else { // Handle collision int newIndex = (index + 1) % TABLE_SIZE; while (hashTable->entries[newIndex] != NULL && strcmp(hashTable->entries[newIndex]->key, key) != 0) { newIndex = (newIndex + 1) % TABLE_SIZE; } if (hashTable->entries[newIndex] != NULL && strcmp(hashTable->entries[newIndex]->key, key) == 0) { return hashTable->entries[newIndex]->value; } else { return -1; // Key not found } } } void freeHashTable(HashTable* hashTable) { for (int i = 0; i < TABLE_SIZE; i++) { if (hashTable->entries[i] != NULL) { free(hashTable->entries[i]->key); free(hashTable->entries[i]); } } free(hashTable->entries); free(hashTable); } int main() { HashTable* hashTable = createHashTable(); // Inserting values into hash table insert(hashTable, "apple", 5); insert(hashTable, "banana", 10); insert(hashTable, "orange", 15); // Getting values from hash table printf("Value for key 'apple': %d\n", get(hashTable, "apple")); printf("Value for key 'banana': %d\n", get(hashTable, "banana")); printf("Value for key 'orange': %d\n", get(hashTable, "orange")); printf("Value for key 'watermelon': %d\n", get(hashTable, "watermelon")); freeHashTable(hashTable); return 0; } ``` 这个代码使用了线性探测法来处理哈希冲突。在插入操作中,如果发生冲突,会往后查找空槽位,直到找到一个空槽位或者遍历完整个哈希表。在查找操作中,如果发生冲突,会往后查找直到找到对应的键或者遍历完整个哈希表。由于这只是一个简单的示例,所以哈希表的大小是固定的。在实际使用中,我们可能会采用更复杂的解决冲突的方法,并且根据需要动态调整哈希表的大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值