数据结构-查找-线性表查找(顺序、二分、ASL)-科班学习笔记
查找的博客会出三篇,此为第一篇,先得了解一些基本概念,如有基础的朋友可跳过,直接看算法
目录
查找基本概念
专业名词
查找:
又称检索,是v指在某种数据结构中找出满足给定条件的元素
查找表:
由一组记录组成的表或文件,每个记录由若干个数据项组成
关键字key:
记录中能唯一标识该记录的数据
内查找外查找:
查找过程在内存进行称内查找,查找过程需访问外存,称外查找
动态查找(dynamic search):
查找的同时进行增删改操作,查找表称动态查找表
静态查找(static search)
单纯查找,查找表称静态查找表
查找方法概述
根据存储结构的不同,查找方法可分为三大类
- 顺序表和链表的查找
将给定的K值与查找表中记录的关键字逐个进行比较, 找到要查找的记录
-
散列表的查找
根据给定的K值直接访问查找表, 从而找到要查找的记录
-
索引查找表的查找
根据索引确定待查找记录所在的块,然后再从块中找到要查找的记录
常见查找方法有
- 顺序查找
- 二分查找
- 二叉排序树查找
- 索引查找
- 散列查找
- B树查找
查找方法的性能指标ASL
通常把查找过程中执行的关键字平均比较个数(也称为平均查找长度)作为衡量一个查找算法效率优劣的标准
其中:
- n是查找表中记录的个数
- pi是查找到第i个记录的概率,一般认为每个记录概率相等,即
p=1/n
- ci是到到第i个记录所需的比较次数
简而言之,ASL = 每个结点的关键字比较次数累加/节点数
接下来进入正题
线性表查找
顺序表类型定义
#define MAXL <表中最多记录个数>
typedef struct
{
KeyType key; //KeyType为关键字的数据类型
InfoType data; //数据项
} RecType; //查找顺序表元素类型
顺序查找
思路:从