我想要一个动态查找表的C语言程序
时间: 2024-02-21 11:57:48 浏览: 5
以下是一个简单的动态查找表的 C 语言程序示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 100
typedef struct Node {
char key[MAX_LEN];
char value[MAX_LEN];
struct Node *next;
} Node;
Node *create_node(char *key, char *value) {
Node *new_node = (Node *) malloc(sizeof(Node));
strcpy(new_node->key, key);
strcpy(new_node->value, value);
new_node->next = NULL;
return new_node;
}
void insert(Node **head, char *key, char *value) {
Node *new_node = create_node(key, value);
if (*head == NULL) {
*head = new_node;
} else {
Node *cur = *head;
while (cur->next != NULL) {
cur = cur->next;
}
cur->next = new_node;
}
}
void delete(Node **head, char *key) {
if (*head == NULL) {
return;
}
Node *cur = *head;
Node *prev = NULL;
while (cur != NULL && strcmp(cur->key, key) != 0) {
prev = cur;
cur = cur->next;
}
if (cur == NULL) {
return;
}
if (prev == NULL) {
*head = cur->next;
} else {
prev->next = cur->next;
}
free(cur);
}
char *search(Node *head, char *key) {
while (head != NULL) {
if (strcmp(head->key, key) == 0) {
return head->value;
}
head = head->next;
}
return NULL;
}
void print_list(Node *head) {
while (head != NULL) {
printf("%s: %s\n", head->key, head->value);
head = head->next;
}
}
int main() {
Node *head = NULL;
insert(&head, "apple", "a kind of fruit");
insert(&head, "banana", "a kind of fruit");
insert(&head, "carrot", "a kind of vegetable");
printf("Before deletion:\n");
print_list(head);
delete(&head, "banana");
printf("After deletion:\n");
print_list(head);
printf("Search result:\n");
printf("%s\n", search(head, "carrot"));
printf("%s\n", search(head, "banana"));
return 0;
}
```
该程序使用链表实现动态查找表,可以插入、删除和查找键值对。注意到 `Node` 结构体中的 `key` 和 `value` 数组是固定长度的,如果需要处理不定长字符串,可以使用动态内存分配。