9.2.4 索引顺序表-静态查找表的实现方法之三

  和顺序表类似,以顺序存储结构的线性表存储静态查找表中的记录,但和顺序表又有所不同,要求线性表中的记录按关键字"分段有序"(如右图所示,称它为"分块有序表"),并在建立这个"分段有序"的顺序表的同时,另建一个"索引",索引为"索引项"的有序表,而每个索引项则由各分段的"最大关键字"和"起始序号"组成,由"分块有序表"和相应的"索引"构成一个"索引顺序表",也是静态查找表的一种实现方法。

  在索引顺序表中进行查找的过程为:首先在索引表中进行折半或顺序查找,以确定待查关键字在分块有序表中所在"块",然后在"块"中进行顺序查找。这种查找方法被称为"索引顺序查找"或"分块查找"。

  例如右图所示例,当给定值为25时,由于21<25<40,则在索引中进行查找后得知,若顺序表中存在关键字等于给定值的数据元素,必在从"5"开始的区段中,由此给定值先后和顺序表中的关键字"31","33","22"和"25"进行比较直至查找成功。若给定值为66,类似地,由在索引中的查找确定若存在必在顺序表的第3块中,即在顺序表中进行顺序查找的范围是从"10"至"13",显然,由于该块中的四个关键字均不等于给定值,由此查找不成功。可见,索引顺序查找也是一种"缩小查找范围"的查找方法。

  在索引顺序表中进行索引顺序查找的平均查找长度为查找索引的平均查找长度 和在顺序表中进行顺序查找的平均查找长度 Lw 之和。假设顺序表的表长为 n,并均匀地分成 b 块,设每块长度为 s,即 b=n/s,则在等概率查找并顺序查找索引的情况下,索引顺序查找的平均查找长度
   
 
  和前两节讨论的顺序表和有序表相比较,以索引顺序表表示静态查找表的优缺点是什么呢?

  容易看出,它的平均查找长度介于顺序表和有序表之间,其表的结构比较灵活,例如,存储记录的线性表可以采用链式存储结构,且整个表不需要有序,可便于插入和删除;又如索引顺序表中的"索引"不一定按"块内最大值"建立,而是可以根据静态查找表的特点建立"分类索引";再如在查找表的记录数众多时还可建立"多层索引"等。
 
动画

  思考题 如上所述索引顺序表必须是"分段有序"的,即其索引为有序表,那么如何保证它满足这个特性呢?

  思考题 你能否举出一个"分类索引"的例子?