C语言实现数据查找:基于二分查找的查找表
C语言实现数据查找:基于二分查找的查找表
本文将介绍如何使用 C 语言构建查找表并实现基于二分查找的查找功能,适用于包含主关键字和次关键字的多项数据。
代码示例
以下是一个基于二分查找的实现代码,其中假设数据项包含主关键字和次关键字:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_ITEM_NUM 100 // 最大数据项个数
#define MAX_KEY_LEN 20 // 最大关键字长度
typedef struct {
char primary_key[MAX_KEY_LEN]; // 主关键字
char secondary_key[MAX_KEY_LEN]; // 次关键字
// 其他数据项...
} Item;
Item item_list[MAX_ITEM_NUM]; // 数据项列表
int item_num = 0; // 数据项个数
// 比较两个主关键字的大小(次关键字不考虑)
int compare_primary_key(const void *a, const void *b) {
return strcmp(((Item *)a)->primary_key, ((Item *)b)->primary_key);
}
// 二分查找指定主关键字的数据项
Item *binary_search_primary_key(const char *key) {
int left = 0, right = item_num - 1;
while (left <= right) {
int mid = (left + right) / 2;
int cmp = strcmp(key, item_list[mid].primary_key);
if (cmp == 0) {
return &item_list[mid];
} else if (cmp < 0) {
right = mid - 1;
} else {
left = mid + 1;
}
}
return NULL;
}
int main() {
// 读入数据项
while (item_num < MAX_ITEM_NUM) {
Item item;
if (scanf('%s %s', item.primary_key, item.secondary_key) != 2) {
break;
}
item_list[item_num++] = item;
}
// 对主关键字进行排序(必须先排序才能进行二分查找)
qsort(item_list, item_num, sizeof(Item), compare_primary_key);
// 输入要查找的主关键字
char key[MAX_KEY_LEN];
printf('Enter primary key to search: ');
scanf('%s', key);
// 查找主关键字
Item *result = binary_search_primary_key(key);
if (result == NULL) {
printf('Not found.\n');
} else {
printf('Primary key: %s, Secondary key: %s\n', result->primary_key, result->secondary_key);
}
return 0;
}
代码解析
- 数据结构定义: 代码首先定义了一个名为
Item的结构体,用于存储每个数据项的信息,包括主关键字 (primary_key)、次关键字 (secondary_key) 以及其他数据项。 - 数据项列表: 定义一个
Item类型数组item_list来存储所有数据项,并使用item_num变量记录当前数据项的个数。 - 主关键字比较函数: 定义
compare_primary_key函数,用于比较两个Item结构体的主关键字大小。该函数是qsort函数的比较函数,用于对主关键字进行排序。 - 二分查找函数: 定义
binary_search_primary_key函数,实现二分查找算法,用于在已排序的主关键字列表中查找指定的主关键字。 - 主函数:
main函数负责:- 读取数据项,并存储到
item_list数组中。 - 对主关键字进行排序。
- 从用户获取要查找的主关键字。
- 调用
binary_search_primary_key函数进行查找。 - 输出查找结果:如果找到,则输出所有数据项;如果没有找到,则输出提示信息。
- 读取数据项,并存储到
总结
本代码示例展示了如何使用 C 语言构建查找表并实现基于二分查找的查找功能。二分查找算法适用于已排序的数据,效率较高,在需要频繁查找的情况下能够显著提高程序性能。
注意: 本代码示例假设数据项包含主关键字和次关键字,可以根据实际情况修改数据结构和查找逻辑。此外,还可以根据需要添加其他功能,例如插入、删除数据项等。
原文地址: https://www.cveoy.top/t/topic/oDZS 著作权归作者所有。请勿转载和采集!