#include<stdio.h>
#define maxsize 100//预定义最大的数据域空间
typedef int datatype;//假设数据类型为整型
typedef struct
{
datatype data[maxsize];//此处假设数据元素只包含一个整型的关键字域
int len;//线性表长度
}seqlist;//预定义的顺序表类型
typedef struct//索引表结点类型
{
datatype key;
int address;
}indexnode;
//分块查找关键字为key的纪录,索引表index[0…m-1]
int indexseqsearch(seqlist l,indexnode index[],int m,datatype key)
{
int i=0,j;
while(i<m&&key>index[i].key)
i++;
if(i>=m)
return -1;
else//在顺序表中检索
{
if(i==m-1)
j=l.len-1;
else
j=index[i+1].address-1;//j初始指向本块最后一个结点
while(j>=index[i].address&&key!=l.data[j])
j–;//从后向前逐个查找
if(j<index[i].address)
return -1;
else
return j;
}
}
int main()
{
int i,k,m;
datatype key;
seqlist l;
indexnode index[10];
printf(“输入线性表的长度:”);
scanf(“%d”,&l.len);
printf(“输入线性表的结点内容:\n”);
for(i=0;i<l.len;i++)
scanf(“%d”,&l.data[i]);
printf(“输入索引表的长度:”);
scanf(“%d”,&m);
printf(“输入索引表的内容(起始地址,最大关键字):\n”);
for(i=0;i<m;i++)
scanf(“%d %d”,&index[i].address,&index[i].key);
do
{
printf(“请输入要查找的关键字(-1退出):”);
scanf(“%d”,&key);
if(key==-1) break;
k=indexseqsearch(l,index,m,key);
if(k==-1)
printf(“查找失败!\n”);
else
printf(“\n在第%d个位置,查找成功!\n”,k);
}while(k!=-1);
}