数据结构-分块查找

226 阅读1分钟

分块查找主要用于线性表局部内元素所在范围是一个有序的结构,将线性表分成多块,且每一块所在的最大范围能够组成一个排序结构表。再使用另外一个线性表进行辅助,记录每一块的数据范围。

算法思路:

1、含有局部排序的线性表L,辅助线性表H

2、将线性表L划分为多个排序的分块,由H记录每一块的范围及所在位置

image.png

image.png

代码参考:

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

// 设置最大长度
#define MaxSize 10

// 构建线性表(静态顺序表)
typedef struct List {
        // 数据表
        int data[MaxSize];
        // 存储数据长度
        int len;
}List;

// 构建辅助线性表(静态顺序表)
typedef struct ListH {
        // 记录开始和结束位置
        int start, end;
}ListH;

// 实例化线性表
void InitList(List* L) {
        int i = 0;
        while (i < MaxSize) {
                L->data[i] = 0;
        }
        L->len = 0;
}

// 通过辅助表获取位置
ListH getMid(int num) {
        ListH LH;
        // 模拟辅助表返回数据
        LH.start = 10;
        LH.end = 12;
        return LH;
}

// 分块查找
int getList(List* L, int num) {
        // 获取辅助表内容
        ListH mid = getMid(num);
        // 在线性表查找
        while (mid.start <= mid.end) {
                if (mid.start == num) { return mid.start; }
                mid.start++;
        }
        return -1;
}

int main() {
        return 0;
}

代码仅供参考,思维逻辑为主。