一、查找的分类:
1、静态查找:不进行插入和删除操作。
2、动态查找:可进行插入和删除操作。
按查找的基本方法可分为:比较查找法和计算查找法。
按元素的组织结构可分为:基于线性表的查找和基于树的查找。
二、顺序查找(基于线性表)
1、数组顺序存储(静态、比较查找)
#include<stdio.h>
#define LIST_SIZE 20
int a[LIST_SIZE]= {6,12,15,18,22,25,28,35,46,58,60,62,64,73,74,76,80,84,85,90}; //顺序存储
main() {
int k,i=0,n=-1;
printf("Please enter what you are looking for:");
scanf("%d",&k);
for(i=0; i<LIST_SIZE; i++) {
if(k==a[i]) {
n=i;
break;}
}
if(n!=-1)
printf("%d",n);
else
printf("not found!");
}
2、结构体顺序存储(静态、比较查找)
#include<stdio.h>
#define LIST_SIZE 20
typedef struct {
int r;
} Recode;
void main() {
Recode stu1[LIST_SIZE]= {{6},{12},{15},{18},{22},{25},{28},{35},{46},{58},{60},{62},{64},{73},{74},{76},{80},{84},{85},{90}};
int k,i=0;
printf("Please enter what you are looking for:");
scanf("%d",&k);
while(i<=LIST_SIZE-1&&stu1[i].r!=k ){
i++;
}
if(i<=LIST_SIZE-1)
printf("%d",i+1);
else
printf("not found!");
}
三、折半查找(静态、比较查找)
将Low初始化为0,而high初始化为MAXSIEZE+1,使之与数组存储结构相匹配,即下标从0开始,避免第一个元素查找不到的问题。
#include<stdio.h>
#define MAXSIZE 20
int BinSrch(int a[],int k) {
int low=0,high=MAXSIZE+1,mid=0; //对应数组的存储结构,即下标从0开始
while(low<=high) {
mid=(low+high)/2;
if(k==a[mid])
return(mid+1);
else if(k<a[mid])
high=mid-1;
else
low=mid+1;
}
return 0;
}
void main() {
int a[MAXSIZE]= {2,3,6,7,8,9,12,14,16,17,22,25,26,28,29,55,44,89,98,100};
int n,k;
printf("Please enter what you are looking for:");
scanf("%d",&k);
n=BinSrch(a,k);
if(n)
printf("%d",n);
else
printf("not found!");
}