数据结构—查找算法(用c语言实现查找算法《一》)

一、查找的分类:
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!");
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值