创建一个索引表

  • 目的
  • 核心算法分析
  • 代码块(运行环境c++)
  • 运行结果

目的

编程实现如下功能:
(1)根据输入索引查找表中的块号和各块中的记录关键字的值创建索引查找表。
(2)利用索引查找确定给定关键字值的记录在索引查找表中的块号和在块中的位置。

核心算法分析

索引查找表有索引表和块表两部分所构成,其中索引表存储的是各块记录中的最大关键字值和各块的起始存储地址,用顺序存储结构,各块的起始存储地址的初始值置为空指针;而块表中存储的是查找表中的所有记录并且按块有序,用链式存储或顺序存储结构,在此用链式存储结构。则索引查找表的存储结构图如7-2所示:

索引表的功能就是快速缩小查找范围,先找到数据所在块,再在块内查找。

代码块(运行环境c++)

下面展示一些 内联代码片

#include <iostream>
#define MAXSIZE 100
#define OK 1;
#define OVERFLOW -1;
#include <malloc.h>;
typedef int Status;
typedef int KeyType;   //整型关键字类型
typedef struct BNode {KeyType key;        //存储块中记录的关键字值struct BNode *next;  //指向块链中下一记录结点的指针
} BNode,*Bnode2;
//块链中的结点类型
typedef struct SNode {KeyType  Maxkey;   //存储各块记录中的最大关键字值BNode  *head;      //块链的头指针
} SNode;             //索引表中元素的类型
typedef struct {SNode  r[MAXSIZE];     //用于存放索引表中快元素的数组int  length;          //用于存放索引表中快的个数
} STable;              //索引查找表的结构类型Status Creat_STable(STable &ST) { //构造一个空的索引表for(int i=1; i<=MAXSIZE; i++)ST.r[i].head=NULL;ST.length=0;return OK;
}//Creat_SSTable
Bnode2 Init_head(Bnode2 head,int n) { //头插法创建块链Bnode2 p;int i=0;head=(Bnode2)malloc(sizeof(BNode));head->next=NULL;while(i<n) {p=(Bnode2)malloc(sizeof(BNode));scanf("%d",&p->key);p->next=head->next;head->next=p;i++;}return head;
}
int FindBlock(STable ST, KeyType key)
//用二分查找法在索引查找表ST的索引表中确定关键字值为key的待查找记录所在的块号,
//函数并返回值其块号值
{int low,high,mid;low=1;high=ST.length;while(low<=high) {mid=(low+high)/2;if (key==ST.r[mid].Maxkey)return mid;else if  (key<ST.r[mid].Maxkey)high=mid-1;elselow=mid+1;}return high+1;
}// FindBlock
int FindRec(STable ST, KeyType key,int &Bno,int &pos)
//用顺序查找法在索引查找表的块链中确定关键字值为key的待查找记录的存储位置
//如果查找成功,记录所在的快号和在快中的位序号分别为Bno和pos,否则都为0
{BNode  *p;int i=1;Bno=FindBlock(ST,key);   //调用函数,确定待查记录所在块号printf("在索引表的第%d个位置",Bno);p=ST.r[Bno].head;        //取到待查记录所在块链的头指针while (p&&p->key!=key) { //顺着链指针依次查找p=p->next;i++;}if (p) {pos=i;//查找成功,在快中的位置为iprintf("在块中的位置为%d\n",i-1);} elsepos=0;           //查找不成功,在快中的位置为0
} //FindRec
int MAxBnode(SNode S) { //判断该块中最大的值int max=0;S.head=S.head->next;while(S.head) {if(S.head->key>max)max=S.head->key;S.head=S.head->next;}return max;
}
int main() {STable ST;Bnode2 T;Bnode2 p;int key2;int get;int i;int length;int pos,Bno;Creat_STable(ST);printf("输入索引表的表长:\n");scanf("%d",&ST.length);for(i=1; i<=ST.length; i++) {printf("输入第%d块的长度:",i);scanf("%d",&length);printf("请输入第%d块的值:",i);ST.r[i].head=Init_head(T,length);ST.r[i].Maxkey=MAxBnode(ST.r[i]);//将第i块中最大的值赋值给Maxkey}for(i=1; i<=ST.length; i++) {printf("第%d块数据最大关键字  ",i);printf("%d",ST.r[i].Maxkey);printf("\n第%d块数据  ",i);p=ST.r[i].head->next; //0号位置未放元素while(p) {printf("%d  ",p->key);p=p->next;}printf("\n");}printf("input KEY\n");while(1) {scanf("%d",&key2);FindRec(ST,key2,Bno,pos);}}

运行结果


写代码不易,觉得有帮助就点个赞吧( ̄y▽, ̄)╭

数据结构之索引表的创建设计相关推荐

  1. 【数据结构】顺序表的创建、插入、删除、合并

    定义一个顺序表结构的学生成绩表结构体 typedef struct{int score[MAXSIZE]; //学生成绩int *elem; //存储空间的基地址 int length; //学生成绩 ...

  2. 云计算设计模式(十二)——索引表模式

    云计算设计模式(十二)--索引表模式 创建索引过的被查询条件经常被引用的数据存储等领域.这种模式可以通过允许应用程序更快速地定位数据来从数据存储中检索提高查询性能. 背景和问题 许多数据存储通过使用主 ...

  3. 重新理解SQL Server的聚集索引表与堆表

    目录 目录 简述SQL Server表的类型 如何区分聚集索引表与堆表 聚集索引表与堆表的正确使用 参考资料 简述SQL Server表的类型 由于当前关系型数据库(RDBMS)种类繁多,存在对标准S ...

  4. MySQL基础下篇[表的创建/约束的使用/事务和范式以及索引的使用]~

    创建表: 建表的语法格式:(建表属于DDL语句,DDL包括: create, drop, alter) 方式1: create table 表名(字段名1 数据类型,字段名2,数据类型,字段名3,数据 ...

  5. 数据结构-串操作应用之词索引表

    为书库创建查询索引表 建立词索引表基本步骤: 1.从书目文件中读入一个书目单. 2.从书目单中提取所有关键字插入词表. 3.对词表中的每一个关键字在索引表中进行查找并作相应的插入操作. 详细操作: 1 ...

  6. oracle创建索引占用表空间吗,oracle创建索引表空间

    或者 drop tablespace 表空间名称 including contents;(表空间下有数据时候用) temporary tablespace 是 oracle 里临时表空间,临时表空间主 ...

  7. spool命令、创建一个表,创建并且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站

      1.spool 命令 spool "D:\test.txt" spool off SQL> host cls 2.创建一个表 SQL> --条件(1):有创 ...

  8. Service Team在索引表CRMD_ORDER_INDEX中的存储设计

    本文介绍Service Team在索引表CRMD_ORDER_INDEX中的存储设计 要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  9. SAP CRM One Order框架里旧式的索引表设计原理

    本文介绍SAP CRM One Order框架里旧式的索引表设计原理. Created by Wang, Jerry on May 17, 2017 要获取更多Jerry的原创文章,请关注公众号&qu ...

最新文章

  1. 忽略这一点,人工智能变人工智障!
  2. 吐槽 | 聊一聊公众号的那些事
  3. android原理揭秘系列之VacantCell缓存
  4. 阿里1682亿背后的协同研发云——云效正式商业化
  5. java jar log4j_使用Log4j
  6. 计算机网络与网页制作教程,计算机网络与网页制作:Dreamweaver CS5案例教程/高等学校通识教育系列教材简介,目录书摘...
  7. 解剖几个有点难度的C笔试题
  8. 博客园在我的博客添加点击小心心特效
  9. 2021年上半年软考真题网络工程师真题及答案解析
  10. 北斗导航 | 基于改进RANSAC算法的BDS接收机自主完好性监测算法研究
  11. Spring Boot 集成maven和Spring boot的profile功能
  12. Rancher安装部署
  13. 西北计算机大赛奖金有多少,我校学生2019年中国大学生计算机设计大赛西北赛区决赛中获得佳绩...
  14. 13.14.4 文本文件到电子表格。python编程快速上手--让繁琐工作自动化 第2版。【美】阿尔·斯维加特 Al Sweigart 著 王海鹏 译 中国工信出版集团 人民邮电出版社
  15. Lodop设置指定打印机打印,避免默认打印机被修改
  16. Unity游戏配置存储方案
  17. 【转载】租房被骗,选择忍让,成就黑中介的猖狂
  18. Cz工具集使用介绍 - 规范Git提交说明
  19. 计算机毕业设计 基于SSM的公交线路查询和管理系统
  20. 一道google面试题--自然数e中出现的连续的第一个10个数字组成的质数

热门文章

  1. 微波射频网在世界电信日 成功召开4G手机射频技术研讨会
  2. linux 4g网卡路由,openwrt编译加载龙尚U8300 4G网卡
  3. 论《金瓶梅》与项目管理中人际关系协调(转)
  4. Flutter下载网络图片到本地
  5. Ubuntu20.04安装Torque-6.1.2单机版(踩坑篇)
  6. 服务器内存条位置插错,电脑内存条应该怎么插?插错位置,你的电脑甚至开不了机...
  7. android 技术亮点,AndroidQ亮点之一:深色主题
  8. GDPR从数据主体处收集信息时的信息提供,应包含哪些内容?怎样做才合规?
  9. 链路聚合--Eth-Trunk
  10. jzoj 3813. 我要的幸福 (Standard IO)