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;
}

代码解析

  1. 数据结构定义: 代码首先定义了一个名为 Item 的结构体,用于存储每个数据项的信息,包括主关键字 (primary_key)、次关键字 (secondary_key) 以及其他数据项。
  2. 数据项列表: 定义一个 Item 类型数组 item_list 来存储所有数据项,并使用 item_num 变量记录当前数据项的个数。
  3. 主关键字比较函数: 定义 compare_primary_key 函数,用于比较两个 Item 结构体的主关键字大小。该函数是 qsort 函数的比较函数,用于对主关键字进行排序。
  4. 二分查找函数: 定义 binary_search_primary_key 函数,实现二分查找算法,用于在已排序的主关键字列表中查找指定的主关键字。
  5. 主函数: main 函数负责:
    • 读取数据项,并存储到 item_list 数组中。
    • 对主关键字进行排序。
    • 从用户获取要查找的主关键字。
    • 调用 binary_search_primary_key 函数进行查找。
    • 输出查找结果:如果找到,则输出所有数据项;如果没有找到,则输出提示信息。

总结

本代码示例展示了如何使用 C 语言构建查找表并实现基于二分查找的查找功能。二分查找算法适用于已排序的数据,效率较高,在需要频繁查找的情况下能够显著提高程序性能。

注意: 本代码示例假设数据项包含主关键字和次关键字,可以根据实际情况修改数据结构和查找逻辑。此外,还可以根据需要添加其他功能,例如插入、删除数据项等。

C语言实现数据查找:基于二分查找的查找表

原文地址: https://www.cveoy.top/t/topic/oDZS 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录