实现顺序查找的算法

课程设计题目

实现顺序查找的算法


课程设计目的

领会顺序查找的过程和算法设计


问题描述

编写一个程序,输出在顺序表(3,6,2,10,1,8,5,7,4,9)中采用顺序查找方法查找关键字 5的过程


数据结构及算法设计

顺序查找是一种简单的线性查找算法,它从列表的第一个元素开始,逐个比较每个元素与关键字的大小。如果找到了与关键字相等的元素,就返回该元素的索引;如果遍历完整个列表都没有找到与关键字相等的元素,则返回-1表示未找到。

在给定的顺序表(3,6,2,10,1,8,5,7,4,9)中,采用顺序查找方法查找关键字 5 的过程如下:

1. 从第一个元素开始,比较当前元素与关键字 5 的大小。

2. 当前元素为 3,小于关键字 5,继续比较下一个元素。

3. 当前元素为 6,大于关键字 5,继续比较下一个元素。

4. 当前元素为 2,小于关键字 5,继续比较下一个元素。

5. 当前元素为 10,大于关键字 5,继续比较下一个元素。

6. 当前元素为 1,小于关键字 5,继续比较下一个元素。

7. 当前元素为 8,大于关键字 5,继续比较下一个元素。

8. 当前元素为 5,等于关键字 5,找到了目标元素,返回其索引位置。

因此,关键字 5 在顺序表中的索引位置为 7。


源程序

#include <stdio.h>
#include <malloc.h>
#define MAXL 100		//最大长度
typedef int KeyType;	//定义关键字类型为int
typedef char InfoType;

typedef struct
{	KeyType key;		//关键字项
	InfoType data;		//其他数据项,类型为InfoType
} RecType;				//查找元素的类型

void CreateList(RecType R[],KeyType keys[],int n)	//创建顺序表
{
	for (int i=0;i<n;i++)			//R[0..n-1]存放排序记录
		R[i].key=keys[i];
}
void DispList(RecType R[],int n)	//输出顺序表
{
	for (int i=0;i<n;i++)
		printf("%d ",R[i].key);
	printf("\n");
}

int SeqSearch(RecType R[],int n,KeyType k)	//顺序查找算法
{
    int i=0;
    while (i<n && R[i].key!=k) 
	{
		printf("%d ",R[i].key);
		i++;					//从表头往后找
	}
    if (i>=n) 
		return 0;
    else 
	{
		printf("%d",R[i].key);
		return i+1;
	}
}
int main()
{
	RecType R[MAXL];
	int n=10,i;
	KeyType k=5;
	int a[]={3,6,2,10,1,8,5,7,4,9};
	CreateList(R,a,n);			//建立顺序表
	printf("关键字序列:"); DispList(R,n);
	printf("查找%d所比较的关键字:\n\t",k);
	if ((i=SeqSearch(R,n,k))!=0)
		printf("\n元素%d的位置是%d\n",k,i);
	else
		printf("\n元素%d不在表中\n",k);
	return 1;
}

数据及结果分析

  通过运行程序,我们可以得到在顺序表 (3, 6, 2, 10, 1, 8, 5, 7, 4, 9) 中采用顺序查找方法查找关键字 5 的过程。


体会

顺序查找是一种简单直观的查找算法,适用于已经排序的数据集合。顺序查找算法要求待查找的数据集合是有序的,即每个元素的位置与其值之间存在一种一一对应的关系。如果数据集合无序,则顺序查找的效果会很差,此时可以考虑使用其他更高效的查找算法,如二分查找等。在顺序查找中,需要明确要查找的数据集合的范围。一般情况下,从第一个元素开始,逐个向后比较,直到找到目标元素或遍历完整个数据集合为止。顺序查找的基本思想是从数组的第一个元素开始,逐个与目标值进行比较,如果相等则返回当前位置;如果不相等且没有到达数组末尾,则继续向后比较下一个元素。重复这个过程,直到找到目标元素或者遍历完整个数组。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万叶学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值