⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 索引查找.txt

📁 数据查找课程设计
💻 TXT
字号:
#include<iostream.h>
#include<string.h>
#define MaxSize 34 //MaxSize为事先定义的整型常量,它要大于等于主表中元素的个数n
#define ILMSize 10 //ILMSize为事先定义的整型常量,它要大于等于索引项数m
typedef char IndexKeyType[15];
typedef char KeyType[15];
class ElemType
{
public:
	  KeyType key;                  //记录的关键字,保存职工号
      char name[20];                //姓名
      char title[10];               //职称
};
class IndexItem
{
public:
    IndexKeyType index;//IndexKeyType为事先定义的索引值类型
    int start;//子表中第一个元素所在的下标位置
    int length;//子表的长度域
};
typedef IndexItem indexlist[ILMSize];//ILMSize为事先定义的整型常量,它要大于等于索引项数m
typedef ElemType mainlist[MaxSize];//MaxSize为事先定义的整型常量,它要大于等于主表中元素的个数n
Indsch(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(strcmp(k1,B[i].index)==0)//若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(strcmp(k2,A[j].key)==0)//若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()
{
	IndexKeyType k1;//声明索引值
	KeyType k2;
    int i;
    int m;//索引项的个数
    int mlnum;//主表中元素的个数
    indexlist B;
    mainlist A;
	cout<<"主表个数不得超过34!\n";
	cout<<"输入主表中元素个数:";
	while(1)
	{
	    cin>>mlnum;
		if(mlnum>34 || mlnum<0)
		{
			cout<<"你所输入的数据不符合,请重新输入:";
		    cin>>mlnum;
		}
		else
			break;
	}
	cout<<"请输入这"<<mlnum<<"个记录!"<<endl;
     for(i=0;i<mlnum;i++)
	 {                  
         cout<<"请输入第"<<i+1<<"个记录(职工号 姓名 职称):"; //依次给主表输入每条记录
         cin>>A[i].key>>A[i].name>>A[i].title;
	 } 
	cout<<"索引表的个数不得超过34!\n";
	cout<<"请输入主表中元素个数:"<<endl;
	while(1)
	{
	    cin>>m;
		if(m>34 || m<0)
		{
			cout<<"你所输入的数据不符合,请重新输入:";
		    cin>>m;
		}
		else
			break;
	}
    cout<<"请输入"<<m<<"个索引项!"<<endl;  //建立索引项
    for(i=0;i<m;i++)
	{
		cout<<"请输入第"<<i+1<<"个索引项(索引值 起始位置 长度):"; 
        cin>>B[i].index>>B[i].start>>B[i].length;
		cout<<endl;
	}
    cout<<"请输入索引值和要查找的关键字:"<<endl;
    cin>>k1>>k2;
    int findindex=Indsch(A,B,m,k1,k2);
    if(findindex!=-1)
        cout<<"找到,下标:"<<findindex+1<<"值为:"<<A[findindex].key<<endl;
    else
        cout<<"找不到"<<endl;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -