顺序查找C/C++代码实现

本文介绍了如何使用C/C++实现顺序查找,并通过设置哨兵来提高查找效率。讨论了算法的时间复杂度为O(n),说明了顺序查找既适用于顺序结构也适用于链式结构,但当数据量较大时效率较低。文中还提供了具体的代码示例及运行结果。

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

设置哨兵的顺序查找:

顺序查找(SequentialSearch)的查找过程为:从表的一端开始,依次将记录的关键字和给定 值进行比较,若某个记录的关键字和给定值相等,则查找成功。

如果不设置哨兵在每次都需要比较是否查找完成,而在0号位设置哨兵可以免去查找过程中每一 步都要检测整个表是否查找完毕,大幅度提高算法效率。

算法效率:

时间复杂度为O(n)
既适用于顺序结构, 也适用链式结构,但当n很大时, 不宜采用顺序查找。

代码如下:

#include<stdio.h>
#include<stdlib.h>

typedef int KeyType;
typedef int InfoType;

//线性表的顺序存储
typedef struct
{
	KeyType key;
	InfoType otherinfo;
}ElemType;
typedef struct
{
	ElemType *R;		//储存空间基地址
	int length;			//当前长度
}SSTable;


//顺序查找
//在顺序表ST中顺序查找其关键字等于key的数据元素。若找到,则函数值为该元素在表中的位置,否则为0 
int  Search_Seq(SSTable ST, KeyType key)
{
	int i;
	ST.R[0].key = key;				//哨兵
	for (i = ST.length; ST.R[i].key != key; i--);		//从后往前找

	return i;
}


int main()
{
	SSTable ST;
	ST.R = (ElemType *)malloc(sizeof(ElemType));

	//输入
	ST.R[1].key = 13;
	ST.R[2].key = 7;
	ST.R[3].key = 3;
	ST.R[4].key = 9;
	ST.R[5].key = 20;
	ST.R[6].key = 4;
	ST.length = 6;

	KeyType key;
	printf("请输入要查找的记录:");
	scanf("%d", &key);
	int i = Search_Seq(ST, key);
	printf("查找记录在表中的位置是(从1开始,0为未找到):%d\n", i);
}

运行结果:

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值