<key.value>结构是常用的数据储存结构,如<张三,19岁><李四,18岁>,请用C语言编程实现<key,value>存储程序模块,向外提供创建和增删改查接口功能
时间: 2024-10-13 17:11:47 浏览: 97
DataStructure C语言版 数据结构与算法教程PPT课件 第11章 结构体与共用体 共44页.pptx
在C语言中,我们可以使用链表数据结构来模拟`<key, value>`这样的键值对存储。这里是一个简单的实现,包含了一个结构体、相关的函数以及创建、增删改查的接口:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义键值对的结构体
typedef struct KVPair {
char* key; // 键
int value; // 值
struct KVPair* next; // 链接下一个元素
} KVPair;
// 创建一个新的键值对
KVPair* create_pair(char* key, int value) {
KVPair* new_pair = (KVPair*)malloc(sizeof(KVPair));
if (!new_pair) {
perror("Memory allocation failed");
return NULL;
}
new_pair->key = strdup(key);
new_pair->value = value;
new_pair->next = NULL;
return new_pair;
}
// 添加新的键值对到链表头部
void insert(KVPair** head, char* key, int value) {
KVPair* new_pair = create_pair(key, value);
if (new_pair) {
new_pair->next = *head;
*head = new_pair;
}
}
// 删除指定键的键值对
KVPair* remove(KVPair** head, char* key) {
if (*head == NULL || (*head)->key == NULL) {
return NULL;
}
if (!strcmp(*head->key, key)) {
KVPair* temp = *head;
*head = (*head)->next;
free(temp);
return temp;
} else {
KVPair* current = *head;
while (current->next != NULL && strcmp(current->next->key, key) != 0) {
current = current->next;
}
if (current->next != NULL) {
KVPair* temp = current->next;
current->next = temp->next;
free(temp);
return temp;
}
}
return NULL;
}
// 查找并返回键对应的值
int find_value(KVPair* head, char* key) {
KVPair* current = head;
while (current != NULL) {
if (!strcmp(current->key, key)) {
return current->value;
}
current = current->next;
}
return -1; // 如果找不到,返回-1表示不存在
}
// 示例使用
int main() {
KVPair* kv_list = NULL;
// 插入键值对
insert(&kv_list, "张三", 19);
insert(&kv_list, "李四", 18);
// 查询并打印
printf("查找张三,值: %d\n", find_value(kv_list, "张三"));
printf("查找王五,值: %d\n", find_value(kv_list, "王五"));
// 删除键为“李四”的键值对
remove(&kv_list, "李四");
// 打印剩余内容
KVPair* current = kv_list;
while (current != NULL) {
printf("%s: %d\n", current->key, current->value);
current = current->next;
}
return 0;
}
```
这个例子中,我们首先定义了键值对的结构体`KVPair`,然后实现了插入、删除、查找和打印操作。请注意,这只是一个基础示例,实际应用中可能需要考虑内存管理和错误处理。
阅读全文