查找与数据的存储结构有关,线性表有顺序和链式两种存储结构。本节只介绍以顺序表作为存储结构时实现的顺序查我算法。定义被查找我的顺序表类型定义如下:#defineMAXL<表中最多记录个数typedef struct/*KeyType为关键字的数据类型*/KeyType key;/*其他数据*/InfoType data; NodeType;typedefNodeTypeSeqListlMAXLl:/*顺序表类型*
6 查找与数据的存储结构有关,线性表有顺序和链 式两种存储结构。本节只介绍以顺序表作为存储结构 时实现的顺序查找算法。定义被查找的顺序表类型定 义如下: #define MAXL <表中最多记录个数> typedef struct { KeyType key; /*KeyType为关键字的数据类型*/ InfoType data; /*其他数据*/ } NodeType; typedef NodeType SeqList[MAXL]; /*顺序表类型*/
顺序查找9.2.1顺序查找是一种最简单的查找方法基本思路:从表的一端开始,顺序扫描线性表,依次将扫描到的关键字和给定值k相比较,若当前扫描到的关键字与k相等,则查找成功;若扫描结束后,仍未找到关键字等于的记录,则查找失败
7 9.2.1 顺序查找 顺序查找是一种最简单的查找方法。 基本思路: 从表的一端开始,顺序扫描线性表,依次将扫 描到的关键字和给定值k相比较,若当前扫描到的 关键字与k相等,则查找成功;若扫描结束后,仍 未找到关键字等于k的记录,则查找失败
例如,在关键字序列为3,9,1,5,8,106,7,2,41的线性表查找关键字为6的元素顺序香找过程如下:开始: 3 9 1 5 8 10 6 7 2 4第1次比较:3 9 15 810 6 72 4i-0第2次比较:39158106724i-1
8 例如,在关键字序列为{3,9,1,5,8,10, 6,7,2,4}的线性表查找关键字为6的元素。 顺序查找过程如下: 开始: 3 9 1 5 8 10 6 7 2 4 第1次比较: 3 9 1 5 8 10 6 7 2 4 i=0 第2次比较: 3 9 1 5 8 10 6 7 2 4 i=1
第3次比较: 3 9 1 5 8 10 6 7 2 4i-2第4次比较:3 915 810 6 72 4i=3第5次比较:3 9 1 5 8 10 6 7 2 4i=4第6次比较:3 9 1 5 8 10 6 7 2 4i=5第7次比较:39158106724i=6查找成功,返回序号6
9 第3次比较: 3 9 1 5 8 10 6 7 2 4 i=2 第4次比较: 3 9 1 5 8 10 6 7 2 4 i=3 第5次比较: 3 9 1 5 8 10 6 7 2 4 i=4 第6次比较: 3 9 1 5 8 10 6 7 2 4 i=5 第7次比较: 3 9 1 5 8 10 6 7 2 4 i=6 查找成功,返回序号6
顺序查找的算法如下(在顺序表RJ0.n-1中查找关键字为k的记录,成功时返回找到的记录位置,失败时返回-1):int SeqSearch(SeqList R, int n , KeyType k)inti=O;while(i<n&&R[il.key!=k)i++;/*从表头往后找*/if (i>=n)return -l;elsereturni
10 顺序查找的算法如下(在顺序表R[0.n-1]中查找关 键字为k的记录,成功时返回找到的记录位置,失败时 返回-1): int SeqSearch(SeqList R,int n,KeyType k) { int i=0; while (i<n && R[i].key!=k) i++; /*从表头往后找*/ if (i>=n) return -1; else return i; }