数据结构总目录

分块查找

分块查找又称索引顺序查找,这是一种性能介于顺序查找和折半查找之间的一种查找方法,也是顺序查找和折半查找的组合查找结合查找方法。

1. 图文解析

在分块查找中
(1)需要建立一个索引表来划分块区域,通过定位某一块区域来查找相应信息
(2)索引表的表项包括两项内容:最大关键项、最大关键项块区域的起始地址
(3)同时索引表一定是有序的顺序表,可用顺序查找和折半查找两种方法查找索引表;
(4)而对索引表所标识的块区域中的数据是无序的,则只能使用顺序查找。

2. 源代码

#include<stdio.h>
#define size 10
// 索引表结构
typedef struct
{int maxKey;     // 索引区间的最大键值int address;    // 索引区间的起始地址(下标)
}Index;int BlockSearch(int *num, Index *index, int numLen, int indexLen, int key)
{// 先折半查找索引表,找到关键值的索引区间int low = 0, high = indexLen - 1;int mid = (low + high) / 2;while (low < high){if (key == index[mid].maxKey){break;}else if (key < index[mid].maxKey){// key可能在mid对应的索引区间内high = mid;}else{low = mid + 1;}// 因为折半查找结束后需要 mid下标来获取对应的索引区间// 查找结束时,low = high,故放在最后进行二分mid = (low + high) / 2;}// printf("折半查找索引表: \n\t区间索引表下标\t= %d\n\t区间最大值\t= %d\n\t区间起始地址\t= %d\n\n", mid, index[mid].maxKey, index[mid].address);// 获取索引区间int i, start = index[mid].address, end;if (mid == indexLen - 1){// 如果是最后一个索引区间,则结束位置为序列长度end = numLen;}else{// 否则结束位置为下一个索引区间的起始位置end = index[mid + 1].address;}// printf("顺序查找索引区间: [%d,  %d)", start, end);// 在折半查找到的区间内进行顺序查找for (i = start; i < end; i++){if (key == num[i]){return i;}}return -1;
}int main()
{int i, num[size] = {3, 2, 1, 0, 5, 4, 9, 8, 7, 6};// 建立索引表Index index[3];// 最大键值 = 3, 起始下标 = 0index[0].maxKey = 3;index[0].address = 0;// 最大键值 = 4, 起始下标 = 4index[1].maxKey = 5;index[1].address = 4;// 最大键值 = 9, 起始下标 = 6index[2].maxKey = 9;index[2].address = 6;// 查找 key=8 的下标位置int pos = BlockSearch(num, index, size, 3, 8);printf("查找成功, 位置 = %d\n", pos);return 0;
}

3. 测试结果

数据结构_分块查找(C语言)相关推荐

  1. 云南计算机专升本数据结构_怎么查找云南省2019年专升本计算机专业试题

    sean容容 2019-12-06 05:38 1360 计算机及应用专业 综合考试卷 一.单项选择题 1.中央处理单元(CPU)的两个主要组成部分是运算器和( ) A.寄存器 B.控制器 C.主存储 ...

  2. 数据结构_排序二叉树(C语言)

    数据结构总目录 排序二叉树 1. 结构解析 排序二叉树的结构规则很简单,只遵循一个基本规则: 那就是在二叉树中,选择任意根结点,其左子树都比根节点小,右子树都比根节点大. 排序二叉树结构图 观察如下二 ...

  3. 数据结构_线索二叉树(C语言)

    数据结构总目录 线索二叉树 1. 结构解析 线索二叉树,是对链式二叉树中的空指针的再次利用,在一般的链式二叉树中,叶子结点都存在左右空指针,所以为了不浪费这些空指针,于是就有了线索二叉树. 线索二叉树 ...

  4. php分块查找,索引查找(索引查找、分块查找) C语言实现

    1.基本概念 索引查找又称分级查找. 索引存储的基本思想是:首先把一个集合或线性表(他们对应为主表)按照一定的函数关系或条件划分成若干个逻辑上的子表,为每个子表分别建立一个索引项,由所有 这些索引项构 ...

  5. 家族关系查询系统程序设计算法思路_七大查找算法(附C语言代码实现)

    来自:Poll的笔记 - 博客园 链接:http://www.cnblogs.com/maybe2030/p/4715035.html 阅读目录 1.顺序查找 2.二分查找 3.插值查找 4.斐波那契 ...

  6. 数据结构c语言版袁和金答案,_数据结构_课程教学中的案例设计及应用_袁和金.pdf...

    _数据结构_课程教学中的案例设计及应用_袁和金 第 16 期 90 2013 年 8 月 25 日 Computer Education G642 袁和金 (华北电力大学 计算机系,河北 保定 071 ...

  7. 数据结构_浙大(C语言) 20211228-20220108

    <数据结构> 浙大(C语言) 课程练习网站: 拼题A(Programming Teaching Assistant):https://pintia.cn/ 本课程的编程练习将在这里布置. ...

  8. 分块查找(完整案例与C语言完整代码实现)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  9. 7.查找——数据结构(严蔚敏 C语言版)

    7.查找 7.1概念 7.1.1查找的分类 查找表可分为两类: 静态查找表: 仅作"查询"(检索) 操作的查找表. 动态查找表: 作"插入"和"删除& ...

最新文章

  1. 华为鸿蒙系统概念图,华为P50Pro概念图:没有麒麟芯片,鸿蒙系统和7镜头也可以很豪横...
  2. java学习路线图(2018年最新版)
  3. javascript es6 module 模块 的使用
  4. Access restriction: The type 'BASE64Encoder' is not API 的解决方法
  5. C语言经典算法100例-002-数轴的使用
  6. 前排强势围观|云端落地AI,如此超级干货有哪些?
  7. I - 数塔(动态规划)数塔问题
  8. Python 文本滚动播放
  9. Xcode 5设置Deployment Target
  10. JAVA类加载机制详解
  11. Kattis - hoppers Hoppers(判奇环)
  12. Python中的PV操作
  13. 沃尔沃旗下豪华纯电动轿跑Polestar 2全球首发
  14. 【BOOST C++字串专题11】Boost.Spirit(三)
  15. 译书《物联网实战指南》出版 | 新成就:翻译自己的英文简介
  16. Microsoft Mathematics(微软数学软件)
  17. BIM软件汇总和信息互用
  18. PHP:关于PHP商城秒杀防止超卖问题
  19. c语言程序设计试题汇编第三版勘误,《C语言程序设计》及《习题集》(姚合生等)勘误表.docx...
  20. 关于大数据、AI,TalkingData有话要说

热门文章

  1. 【Python入门教程】第81篇 常用字符串方法之拆分字符串
  2. Python list 和 numpy 实现 3-sigma 异常值剔除和异常值替换实例
  3. Hadoop YARN ResourceManager未授权访问漏洞
  4. 隔墙有耳之数据在存储的时候对数据加密
  5. UOJ #142. 【UER #5】万圣节的南瓜灯 并查集
  6. 爱情是什么? 婚姻是什么?
  7. 什么是TCP/UDP协议?(超简单,一看就会)
  8. java swing 登陆界面+跳转界面
  9. CCNP-交换考题分析
  10. spring cloud学习,转载自纯洁的微笑