#include <iostream>
using namespace std;
#define MAXSIZE 50
typedef int KeyType;
typedef struct{
KeyType key;
}ElemType;
typedef struct{
ElemType *R;
int length;
}SSTable;
bool CreateList(SSTable &L)
{ int i;
L.R=new ElemType[MAXSIZE+1]; //分配空间
if (!L.R) return false;
cout<<"请输入线性表的长度,不能大于"<<MAXSIZE<<':'; cin>>L.length;
cout<<"请输入表中元素:";
for(i=1;i<=L.length;i++)
cin>>L.R[i].key;
}
void print(SSTable L)
{ int i;
for(i=1;i<=L.length;i++)
if (i==1) cout<<'('<<L.R[i].key;
else cout<<','<<L.R[i].key;
cout<<')'<<endl;
}
int Search_Seq(SSTable S,KeyType key){//顺序查找
int i;
S.R[0].key=key;
for(i=S.length;S.R[i].key!=key;--i);
return i;
}
int Search_Bin(SSTable S,KeyType key){//折半查找(表需有序)
int low,high,mid;
low=1;high=S.length;
while(low<=high){
mid=(low+high)/2;
if(key==S.R[mid].key)
return mid;
else if(key<S.R[mid].key)
high=mid-1;
else
low=mid+1;
}
return 0;
}
int main(){
int m,n,x;
SSTable S;
CreateList(S);
while(x){
cout<<"请输入要查找的元素:\n";
cin>>m;
cout<<"------请选择查找方式------\n" ;
cout<<"----折半查找,表需有序----\n" ;
cout<<"------[1]顺序查找---------\n" ;
cout<<"------[2]折半查找---------\n" ;
cout<<"------[0]退出-------------\n" ;
cin>>x;
switch(x)
{ case 1:n=Search_Seq(S,m);cout<<"元素位置为:"<<n<<endl; break;
case 2:n=Search_Bin(S,m);cout<<"元素位置为:"<<n<<endl; break;
case 0:break;
default:cout<<"你的选择有错,请重新选择!" ;
}
cout<<"是否继续查找元素?\n";
cout<<"是[1]\n";
cout<<"否[0]\n";
cin>>x;
}
return 0;
}
【数据结构作业六a】建立一个顺序表,用顺序查找、折半查找的方法对其实施查找
最新推荐文章于 2023-07-07 20:54:55 发布