#include<iostream.h>#define MaxSize 30 //MaxSize为事先定义的整型常量,它要大于等于主表中元素的个数n#define ILMSize 10 //ILMSize为事先定义的整型常量,它要大于等于索引项数mtypedef int IndexKeyType;typedef int KeyType;struct ElemType{ int key;};struct IndexItem{ IndexKeyType index;//IndexKeyType为事先定义的索引值类型 int start;//子表中第一个元素所在的下标位置 int length;//子表的长度域};typedef IndexItem indexlist[ILMSize];//ILMSize为事先定义的整型常量,它要大于等于索引项数mtypedef ElemType mainlist[MaxSize];//MaxSize为事先定义的整型常量,它要大于等于主表中元素的个数nIndsch(mainlist A,indexlist B,int m,IndexKeyType k1,KeyType k2) //利用主表A和大小为m的索引表B索引查找索引值为k1,关键字为k2 //的记录,返回该记录在主表中的下标位置,若查找失败则返回-1{ int i,j; //在索引表中顺序查找索引值为k1的索引项 for(i=0;i<m;i++) if(k1==B[i].index)//若IndexKeyType被定义为字符串 //类型,则条件应改为strcmp(k1,B[i].index)==0 break; //若i等于m,则表明查找失败,返回-1 if(i==m) return -1; //在已经查找到的第i个子表中顺序查找关键字为k2的记录 j=B[i].start; while(j<B[i].start+B[i].length) if(k2==A[j].key)//若KeyType被定义为字符串 //类型,则条件应改为strcmp(k2,A[j].key)==0 break; else j++; //若查找成功则返回元素的下标位置,否则返回-1 if(j<B[i].start+B[i].length) return j; else return -1;}void main(){ int i; int m=3;//索引项的个数,这里假设将主表分表三块,则有三个索引项 int mlnum=15;//主表中元素的个数 indexlist B; mainlist A; cout<<"输入主表中的"<<mlnum<<"个元素"<<endl; for(i=0;i<mlnum;i++) cin>>A[i].key; cout<<"输入"<<m<<"个索引项(索引值、子表中第一个元素所在的下标位置、子表的长度域:"<<endl; cout<<"这里用n表示第n块"<<endl; for(i=0;i<m;i++) cin>>B[i].index>>B[i].start>>B[i].length; cout<<"输入块号k1和要查找的关键字k2:"<<endl; int k1,k2; cin>>k1>>k2; int findindex=Indsch(A,B,m,k1,k2); if(findindex!=-1) cout<<"找到,下标:"<<findindex<<"值为:"<<A[findindex].key<<endl; else cout<<"找不到"<<endl;}//测试用例/*输入主表中的15个元素1 2 3 4 5 6 7 8 9 10 11 12 13 14 15输入3个索引项(索引值、子表中第一个元素所在的下标位置、子表的长度域:这里用n表示第n块1 0 52 5 53 10 5输入块号k1和要查找的关键字k2:2 8找到,下标:7值为:8*//*http://java2.xinwen365.netQQ群:34409541 讨论网页 34409326 讨论JAVA 已满 34408784 讨论VC++ 34409699 讨论VC++ 9143041 讨论MFC编程 10614204 讨论C# 10613030 讨论Win32编程 10613067 讨论游戏开发 18779860 讨论JAVA */