在很多应用场景中,数据不仅仅是简单的单个值,而是以键值对(Key-Value Pair)的形式存在。顺序查找(Sequential Search)是一种简单而有效的查找方法,适用于键值对的查找。本文将介绍如何在顺序表中实现键值对的顺序查找,并提供完整的C语言代码示例。
键值对的基本概念
键值对由两个部分组成:
- 键(Key):用于标识数据元素的唯一标识符。
- 值(Value):与键相关联的数据。
顺序查找的基本步骤:
- 从表头开始,依次扫描顺序表中的每个键值对。
- 比较当前键与目标键。
- 如果找到目标键,则返回其对应的值。
- 如果遍历完整个顺序表仍未找到目标键,则返回一个标识查找失败的值。
C语言实现
键值对和顺序表的定义
首先,我们定义键值对和顺序表的数据结构。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_SIZE 100 // 顺序表的最大容量
#define KEY_SIZE 50 // 键的最大长度
#define VALUE_SIZE 100 // 值的最大长度
typedef struct {
char key[KEY_SIZE];
char value[VALUE_SIZE];
} KeyValuePair;
typedef struct {
KeyValuePair data[MAX_SIZE]; // 存储键值对的数组
int length; // 顺序表的当前长度
} SeqList;
// 初始化顺序表
void initSeqList(SeqList *list) {
list->length = 0;
}
顺序查找的实现
接下来,我们实现顺序查找函数。
// 顺序查找函数
const char* sequentialSearch(SeqList *list, const char *key) {
for (int i = 0; i < list->length; i++) {
if (strcmp(list->data[i].key, key) == 0) {
return list->data[i].value; // 返回找到的值
}
}
return NULL; // 查找失败
}
插入键值对的实现
为了方便测试,我们还需要实现一个插入键值对的函数。
// 向顺序表中插入键值对
void insertKeyValuePair(SeqList *list, const char *key, const char *value) {
if (list->length >= MAX_SIZE) {
printf("List is full, cannot insert element.\n");
return;
}
strcpy(list->data[list->length].key, key);
strcpy(list->data[list->length].value, value);
list->length++;
}
int main() {
SeqList list;
initSeqList(&list);
// 插入一些键值对
insertKeyValuePair(&list, "name", "Alice");
insertKeyValuePair(&list, "age", "30");
insertKeyValuePair(&list, "city", "New York");
insertKeyValuePair(&list, "email", "alice@example.com");
const char *key = "city";
const char *value = sequentialSearch(&list, key);
if (value != NULL) {
printf("Key: %s, Value: %s\n", key, value);
} else {
printf("Key %s not found.\n", key);
}
return 0;
}
运行结果
运行上述代码,将输出以下结果:
- 键值对和顺序表的定义:
- 定义了键值对的数据结构,包括键和值两个字符串。
- 定义了顺序表的数据结构,包括存储键值对的数组和顺序表的当前长度。
- 实现了初始化函数,将顺序表的长度初始化为0。
- 顺序查找的实现:
- 顺序查找函数遍历顺序表中的每个键值对,逐个比较键值对中的键与目标键。
- 找到目标键时,返回其对应的值;未找到时,返回NULL。
- 插入键值对的实现:
- 插入键值对函数在顺序表末尾添加新键值对,并更新顺序表的长度。
- 测试函数:
- 初始化顺序表,插入一些测试键值对,并调用顺序查找函数查找目标键。
- 输出查找结果。
总结
通过本文的讲解和代码示例,我们学习了如何用C语言实现键值对的顺序查找。顺序查找是一种简单而有效的查找方法,适用于键值对的查找。