8.3 索引顺序表和倒排表
当数据表中的数据元素个数n很大时,如果用顺序查找结构,则查找效率极低。如果采用有序表存储形式的折半查找,则为了维持数据表的有序性,时间开销很大;而且,当数据表很大时,计算机内存的容量可能不够。这时可采用索引方法来实现存储和查找。
8.3.1 索引顺序表
- 索引顺序表一般由主表和索引表两个部分组成,两者均采用顺序存储结构。
主表中存放数据元素的全部信息,索引表中存放数据元素的主键字和索引信息。
(1)完全索引
- 在图8-3所示的学生信息表的例子中,一个索引项对应数据表中一个数据元素,这时的索引结构叫作稠密索引也称完全索引。稠密索引结构适用于当数据元素在外存中按加入次序存放而不是按关键字有序存放的情形。
- 完全索引表中关键字分块有序存放,即把所有n个索引项分为m个块 (子表),井且后一个子表中所有的关键字均大于前一个子表中所有的关键字,而在同一子表中所有关键字的次序任意。分块有序,索引按照关键字的大小建立,可知大于某个值或者小于某个值可以到哪个块里面去查找。经典的分块查找要求块间有序、块内也有序,如果块与块无序就无法建立索引。
- 分块查找的具体实现
转载自:https://www.cnblogs.com/ciyeer/p/9067048.html
#include <stdio.h>
#include <stdlib.h>
struct index {
//定义块的结构
int key;
int start;
} newIndex[3]; //定义结构体数组
int search(int key, int a[]);
int cmp(const void *a,const void* b){
return (*(struct index*)a).key>(*(struct index*)b).key?1:-1;
}