顺序查找

本文介绍了一种基于顺序表的查找算法,该算法通过设置监听哨来避免越界问题,适用于顺序或链式存储结构。文章详细展示了使用C语言实现的带有监听哨的顺序查找过程,包括初始化线性表、输入数据以及执行查找操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用所给关键字与线性表中各元素的关键字逐个比较,直到成功或失败。存储长为顺序结构,也可为链式结构,本文采用顺序存储结构

通过设置监听哨防止查找越界

#include <stdio.h>
#include <stdlib.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 //设有监听哨的顺序查找
#define OK 1
#define ERROR 0
typedef int KeyType;
typedef struct{
	KeyType key;//顺序表元素值
}RecordType;
typedef struct{
	RecordType *r;//数组r
	int length;//顺序表长度
}RecordList;
int SeqSet(RecordList *L){
	int i;
	printf("请输入线性表长度:");
	scanf("%d",&(L->length));
	printf("请输入线性表中元素:");
	L->r=(RecordType*)malloc((L->length+1)*sizeof(RecordType));//动态分配数组存储空间为L->length+1
	for(i=1;i<=L->length;i++){
		scanf("%d",&(L->r[i].key));//为地址为1到L->length数组元素赋值
	}
	return 0;
}
int SeqSearch(RecordList L,KeyType k,int i){
/** 从第L->length个元素从后往前查找
* L.r[0]为监听哨,在顺序表中查找关键字值等于k的元素,找到返回其位置,否则返回0
*/
	L.r[0].key=k;
	while(L.r[i].key!=k){
		i--;
	}
	return(i);
}

int main() {
	//value为需要查找的值,position为元素所在位置
	RecordList a;
	KeyType value;
	int position,i;
	SeqSet(&a);
	i=a.length;
	printf("请输入要查找的值:");
	scanf("%d",&value);
	printf("值为%d的元素的位置为:",value);
	while(i>=0){//找出所有值为value的元素,并输出
		position=SeqSearch(a,value,i);
		if(position!=0)
		printf("%d ",position);
		i=position-1;
		//赋予新的i值,从刚找到值为value的元素的前一个位置开始查找,新位置-1赋值给i
	}
	printf("\n");
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值