#include <stdio.h>
#include <stdlib.h>
#define maxsize 100
typedef int datatype;
typedef struct
{
datatype data[maxsize]; ///数组
int len; ///线性表长度
}seqlist;
///顺序查找
int seqsearch1(seqlist l,datatype key)
{
///记录线性表最后一个元素
int k=l.len-1;
while(k>=0&&l.data[k]!=key)
k--;
if(k>=0)
return k;
else
return -1;
}
void display()
{
seqlist l;
int i=0,key,result;
printf("Please input element:");
while(1)
{
scanf("%d",&l.data[i]);
i++;
if(getchar()=='\n')
break;
}
l.len=i;
printf("please enter look up:");
scanf("%d",&key);
result=seqsearch1(l,key);
if(result>=0)
printf("key:%d",result+1);
else
printf("fail!");
}
///递归 顺序表l 顺序表长度n 查找的关键key
int seqsearch2(seqlist l,int n,datatype key)
{
int k=0;
if(n==-1)
k=-1;
else if(l.data[n]==key)
k=n;
else
k=seqsearch2(l,n-1,key);
return k;
}
void display2()
{
seqlist l;
int i=0,key,result;
printf("Please input element:");
while(1)
{
scanf("%d",&l.data[i]);
i++;
if(getchar()=='\n')
break;
}
l.len=i;
printf("please enter look up:");
scanf("%d",&key);
result=seqsearch2(l,i,key);
if(result>=0)
printf("key:%d",result+1);
else
printf("fail!");
}
///二分检索法
int binsearch(seqlist l,datatype key)
{
int low=0,high=l.len-1,mid;
while(low<=high)
{
mid=(low+high)/2; ///二分
if(l.data[mid]==key)
return mid; ///检索成功返回
if(l.data[mid]>key)
high=mid-1; ///继续在前半部分二分检索
else
low=mid+1; ///后半部分二分检索
}
//if(low>high)
return -1;
}
void display3()
{
seqlist l;
int i=0,key,result;
printf("Please input element:");
while(1)
{
scanf("%d",&l.data[i]);
i++;
if(getchar()=='\n')
break;
}
l.len=i;
printf("please enter look up:");
scanf("%d",&key);
result=binsearch(l,key);
if(result>=0)
printf("key:%d\n",result+1);
else
printf("fail!");
}
///递归 顺序表l 关键字key 顺序表起点low 终点high
int binsearch2(seqlist l,datatype key,int low,int high)
{
int mid;
if(low>high)
return -1; ///检索不成功的出口条件
else
{
mid=(low+high)/2; ///二分
if(l.data[mid]==key)
return mid;
if(l.data[mid]>key)
return binsearch2(l,key,low,mid-1); ///递归在前半部分检索
else
return binsearch2(l,key,mid+1,high); ///后半部分检索
}
}
void display4()
{
seqlist l;
int i=0,key,result;
printf("Please input element:");
while(1)
{
scanf("%d",&l.data[i]);
i++;
if(getchar()=='\n')
break;
}
l.len=i;
printf("please enter look up:");
scanf("%d",&key);
result=binsearch2(l,key,0,i-1);
if(result>=0)
printf("key:%d",result+1);
else
printf("fail!");
}
void myexit()
{
int a;
char ch;
printf("\t是否确定退出?请选择 y or n: ");
getchar();
ch=getchar();
if(ch=='y'||ch=='Y')
exit(0);
else
menu();
}
void menu()
{
printf("\n\n\n\n");
printf("\t\t\t\t* * * * * * * * * * 检索 * * * * * * * * *\n");
printf("\t\t\t\t* 0.退出 *\n");
printf("\t\t\t\t* 1.非递归检索 *\n");
printf("\t\t\t\t* 2.递归检索 *\n");
printf("\t\t\t\t* 3.非递归二分法检索 *\n");
printf("\t\t\t\t* 4.递归二分法检索 *\n");
printf("\t\t\t\t* 5.分块检索 *\n");
printf("\t\t\t\t* * * * * * * * * * * * * 强哥版权所有* * *\n\n");
printf("\t\t\t\tChoose 0-6:");
}
int main()
{
int n;
menu();
scanf("%d",&n);
while(n)
{
system("cls");
switch(n)
{
case 0:
myexit();
break;
case 1:
display();
break;
/*case 2:
display2();
break;
case 3:
display3();
break;
case 4:
display4();
break;
case 5:
break;
default:break;*/
}
getch();
menu();
scanf("%d",&n);
}
return 0;
}
#include <stdlib.h>
#define maxsize 100
typedef int datatype;
typedef struct
{
datatype data[maxsize]; ///数组
int len; ///线性表长度
}seqlist;
///顺序查找
int seqsearch1(seqlist l,datatype key)
{
///记录线性表最后一个元素
int k=l.len-1;
while(k>=0&&l.data[k]!=key)
k--;
if(k>=0)
return k;
else
return -1;
}
void display()
{
seqlist l;
int i=0,key,result;
printf("Please input element:");
while(1)
{
scanf("%d",&l.data[i]);
i++;
if(getchar()=='\n')
break;
}
l.len=i;
printf("please enter look up:");
scanf("%d",&key);
result=seqsearch1(l,key);
if(result>=0)
printf("key:%d",result+1);
else
printf("fail!");
}
///递归 顺序表l 顺序表长度n 查找的关键key
int seqsearch2(seqlist l,int n,datatype key)
{
int k=0;
if(n==-1)
k=-1;
else if(l.data[n]==key)
k=n;
else
k=seqsearch2(l,n-1,key);
return k;
}
void display2()
{
seqlist l;
int i=0,key,result;
printf("Please input element:");
while(1)
{
scanf("%d",&l.data[i]);
i++;
if(getchar()=='\n')
break;
}
l.len=i;
printf("please enter look up:");
scanf("%d",&key);
result=seqsearch2(l,i,key);
if(result>=0)
printf("key:%d",result+1);
else
printf("fail!");
}
///二分检索法
int binsearch(seqlist l,datatype key)
{
int low=0,high=l.len-1,mid;
while(low<=high)
{
mid=(low+high)/2; ///二分
if(l.data[mid]==key)
return mid; ///检索成功返回
if(l.data[mid]>key)
high=mid-1; ///继续在前半部分二分检索
else
low=mid+1; ///后半部分二分检索
}
//if(low>high)
return -1;
}
void display3()
{
seqlist l;
int i=0,key,result;
printf("Please input element:");
while(1)
{
scanf("%d",&l.data[i]);
i++;
if(getchar()=='\n')
break;
}
l.len=i;
printf("please enter look up:");
scanf("%d",&key);
result=binsearch(l,key);
if(result>=0)
printf("key:%d\n",result+1);
else
printf("fail!");
}
///递归 顺序表l 关键字key 顺序表起点low 终点high
int binsearch2(seqlist l,datatype key,int low,int high)
{
int mid;
if(low>high)
return -1; ///检索不成功的出口条件
else
{
mid=(low+high)/2; ///二分
if(l.data[mid]==key)
return mid;
if(l.data[mid]>key)
return binsearch2(l,key,low,mid-1); ///递归在前半部分检索
else
return binsearch2(l,key,mid+1,high); ///后半部分检索
}
}
void display4()
{
seqlist l;
int i=0,key,result;
printf("Please input element:");
while(1)
{
scanf("%d",&l.data[i]);
i++;
if(getchar()=='\n')
break;
}
l.len=i;
printf("please enter look up:");
scanf("%d",&key);
result=binsearch2(l,key,0,i-1);
if(result>=0)
printf("key:%d",result+1);
else
printf("fail!");
}
void myexit()
{
int a;
char ch;
printf("\t是否确定退出?请选择 y or n: ");
getchar();
ch=getchar();
if(ch=='y'||ch=='Y')
exit(0);
else
menu();
}
void menu()
{
printf("\n\n\n\n");
printf("\t\t\t\t* * * * * * * * * * 检索 * * * * * * * * *\n");
printf("\t\t\t\t* 0.退出 *\n");
printf("\t\t\t\t* 1.非递归检索 *\n");
printf("\t\t\t\t* 2.递归检索 *\n");
printf("\t\t\t\t* 3.非递归二分法检索 *\n");
printf("\t\t\t\t* 4.递归二分法检索 *\n");
printf("\t\t\t\t* 5.分块检索 *\n");
printf("\t\t\t\t* * * * * * * * * * * * * 强哥版权所有* * *\n\n");
printf("\t\t\t\tChoose 0-6:");
}
int main()
{
int n;
menu();
scanf("%d",&n);
while(n)
{
system("cls");
switch(n)
{
case 0:
myexit();
break;
case 1:
display();
break;
/*case 2:
display2();
break;
case 3:
display3();
break;
case 4:
display4();
break;
case 5:
break;
default:break;*/
}
getch();
menu();
scanf("%d",&n);
}
return 0;
}