课程设计 数据查找 第三种方法索引查找求解
#include<iostream.h>#include<iomanip.h>
#include<iostream.h>
void menu();
void sequenceSeqsch();//顺序查找
void binSearch();//二分查找
int indsch();//索引查找
void hashSearch();//散列查找
void main()
{
int select;
while(1)
{
menu();
cout<<"请输入你的选择:";
cin>>select;
switch(select)
{
case 1:
sequenceSeqsch();
break;
case 2:
binSearch();
break;
case 3:
indsch();
break;
case 4:
hashSearch();
break;
case 0:
return;
}
}
cout<<endl;
}
void menu()
{
cout<<"\t数据查找"<<endl;
cout<<"================================="<<endl;
cout<<"\t 1 --------顺序查找"<<endl;
cout<<"\t 2 --------二分查找"<<endl;
cout<<"\t 3 --------索引查找"<<endl;
cout<<"\t 4 --------散列查找"<<endl;
cout<<"\t 0 --------退出"<<endl;
cout<<"================================="<<endl;
cout<<"\t请选择(1 ~ 4)"<<endl;
}
void sequenceSeqsch()
{
int a[5];int b;
int i;
cout<<"输入数组(包括五个元素):"<<endl;
for(i=0;i<5;i++)
cin>>a[i];
cout<<"要查询的数据:"<<endl;
cin>>b;
for(i=0;i<5;i++)
if(a[i]==b)
cout<<"要查询的数据是该数组中的第"<<i+1<<"个数"<<endl;
if(i==4)
cout<<"在该数组中没有要查找的数据"<<endl;
}
void binSearch()//二分查找
{
int a[5] ,m;
int i,j,temp,k=0;
int x=0,y=4,mid;
cout<<"输入数组:"<<endl;
for(i=0;i<5;i++)
for(j=0;j<5-i;j++)
if(a[j]<a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
cout<<"按降序排序后的数组为:"<<endl;
for(i=0;i<5;i++)
cout<<a[i]<<" "<<endl;
cout<<"要查询的数据:"<<endl;
cin>>m;
while(x<=y)
{
mid=(x+y)/2;
if(a[mid]==m)
{
k=1;
break;
}
if(a[mid]>m)
x=mid+1;
else y=mid-1;
}
if(k==1)
cout<<"要查找的数据是该数组中的第:"<<mid+1<<"个数"<<endl;
else cout<<"在该数组中没有要查询的数据"<<endl;
}
struct f1
{
int id;
char name[10];
double ms;
};
struct f2
{
int index;
int start;
int length;
};
int indsch()
{
f1 a[5];int n;f2 b[5];int m;int k1;int k2;
int i,j;
for(i=0;i<m;i++)
if(k1==b[i].index)
break;
if(i==m)
return -1;
j=b[i].start;
while(j<b[i].start +b[i].length )
if(a[j].id ==k2)
break;
else j++;
if(j<b[i].start +b[i].length )
return j;
else return -1;
}
void hashSearch()//散列查找
{ int a[5];
int b[50];
cout<<"请输入5个整数"<<endl;
for(int i=0;i<5;i++)
cin>>a[i];
for(i=0;i<50;i++)
b[i]=-2;
for(i=0;i<5;i++)
{
int j=a[i]%13;
if(b[j]==-2)
b[j]=a[i];
else
{
for(int k=j+1;k<13;k++)
{
if(b[k]==-2)
{
b[k]=a[i];
break;
}
}
if(k==13)
{
for(k=j-1;k>=0;k--)
{
if(b[k]==-2)
{
b[k]=a[i];
break;
}
}
}
}
}
int key;
cout<<"请输入要查找的元素:"<<endl;
cin>>key;
int p=key%13;
if(b[p]==key)
cout<<"要查找的数据元素:"<<endl;
else
{
for(i=p+1;i<50;i++)
{
if(b[i]==key)
{
cout<<"找到要查询的数据元素:"<<"其地址为:"<<p<<endl;
break;
}
if(b[i]==-2)
{
cout<<"在原信息中没有找到要查询的数据:"<<endl;
break;
}
}
if(i=50)
{
for(i=p-1;i>=0;i--)
{
if(b[i]==key)
{
cout<<"找到要查询的数据元素:"<<endl;
break;
}
if(b[i]==-2)
{cout<<"在原信息中没有找到要查询的数据:"<<endl;
break;
}
}
}
}
}