用 C 语言 编程实现<key.value>存储模块,向外提供创建和增删改查接口功能
时间: 2024-12-13 09:25:49 浏览: 11
在C语言中,通常我们不会直接使用键值对存储模块,因为C语言的标准库并没有内置这样的数据结构。但是,我们可以借助一些外部库如`jemalloc`、`htobe64`等辅助工具,或者自定义结构体配合哈希表或二叉搜索树等数据结构来实现类似的功能。
以下是一个简单的示例,使用动态内存管理和链表实现了一个基本的键值对存储模块:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct KeyValNode {
char* key;
void* value; // 为了演示,这里假设value可以是任意类型的数据
struct KeyValNode* next;
} KeyValNode;
typedef struct KeyValueStore {
int size;
KeyValNode* head;
} KeyValueStore;
KeyValStore* kv_store_init() {
KeyValStore* store = (KeyValStore*)malloc(sizeof(KeyValStore));
store->size = 0;
store->head = NULL;
return store;
}
void kv_store_add(KeyValueStore* store, const char* key, void* value) {
KeyValNode* newNode = (KeyValNode*)malloc(sizeof(KeyValNode));
newNode->key = strdup(key);
newNode->value = value;
newNode->next = store->head;
store->head = newNode;
store->size++;
}
// 示例:查找并打印指定键的值
void* kv_store_get(const KeyValStore* store, const char* key) {
for (KeyValNode* node = store->head; node != NULL; node = node->next) {
if (strcmp(node->key, key) == 0) {
return node->value;
}
}
return NULL; // 如果找不到,返回NULL
}
// 删除操作略去,需要添加额外的逻辑来处理
int kv_store_destroy(KeyValueStore* store) {
KeyValNode* temp;
while (store->head != NULL) {
temp = store->head;
store->head = store->head->next;
free(temp->key);
free(temp->value);
free(temp);
}
free(store);
return 0;
}
// 提供API
KeyValStore* kv_create() {
return kv_store_init();
}
void kv_insert(KeyValStore* store, const char* key, void* value) {
kv_store_add(store, key, value);
}
void* kv_search(KeyValStore* store, const char* key) {
return kv_store_get(store, key);
}
void kv_destroy(KeyValStore* store) {
kv_store_destroy(store);
}
阅读全文