【数据结构】-顺序查找

1.头文件及类型定义

#include<stdio.h>
#include<stdlib.h>
#define InitSize 10		//初始化数组长度
#define ElemType int	

2.顺序表类型定义

//顺序查找表类型定义-顺序表(动态分配)
typedef struct {
	ElemType* elem;		//用动态数组存放数据元素
	int length;			//顺序表的当前长度
}SSTable;

3.函数声明

/*函数声明*/
void InitTable(SSTable& ST);					//1.初始化顺序表
bool AssignTable(SSTable& ST);					//2.赋值
int Search_Seq(SSTable ST, ElemType key);		//3.顺序查找

4.基本操作

4.1 初始化顺序表

//1.初始化顺序表
void InitTable(SSTable& ST) {
	ST.elem = (ElemType*)malloc(sizeof(ElemType) * InitSize);		//初始化动态数组基址
	ST.length = 0;
}

4.2 赋值

//2.赋值(仅做测试)
bool AssignTable(SSTable& ST) {
	int i = 1;
	ElemType x;
	scanf("%d", &x);
	while (x != -1) {		//输入-1结束顺序表赋值
		if (ST.length >= InitSize-1)		//判断当前存储空间是否已满,若已满,不能插入
			return false;
		ST.elem[i] = x;
		ST.length++;
		i++;
		scanf("%d", &x);
	}
	return true;
}

4.3 顺序查找★★★

//3.顺序查找
int Search_Seq(SSTable ST, ElemType key) {
	int i;		//循环变量&数组下标
	ST.elem[0] = key;	//"哨兵"
	for (i = ST.length; ST.elem[i] != key; --i);	//从后往前
	return i;		//若表中不存在关键字为key的元素,将查找到i为0时退出for循环
}

4.4 main函数

int main() {
	SSTable ST;			//声明顺序表
	InitTable(ST);		//初始化顺序表

	printf("顺序表赋值开始,请依次输入元素:");
	if (!AssignTable(ST))	
		printf("输入元素个数大于顺序表长度,赋值失败!");
	else {
		printf("当前顺序表的长度为:%d\n", ST.length);
		int key;		
		printf("请输入您要查找的值:");
		scanf("%d", &key);
		if (!Search_Seq(ST, key))
			printf("当前顺序表中无此元素!");
		else
			printf("您要查找的元素所在位序为:%d", Search_Seq(ST, key));
	}	
	return 0;
}

5.小结

  • 说明
    顺序查找也称线性查找,主要用于在线性表中进行查找。通常分为关键字无序的顺序查找和关键字有序的顺序查找。本文实现的是无序的顺序查找,当关键字有序时,查找失败可以不用再比较到表的另一端就能返回查找失败的信息,从而降低顺序查找失败的平均查找长度。

    需要注意的是,顺序查找不是就必须要用顺序表,顺序查找的线性表既可以是顺序存储结构->顺序表;又可以是链式存储结构->链表,本文实现的方式是动态分配的顺序表,其他存储结构也类似。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值