2、顺序查找的存储结构要求 顺序查找方法既适用于线性表的顺序存储结构 也适用于线性表的链式存储结构(使用单链表 作存储结构时,扫描必须从第一个结点开始)。 3、基于顺序结构的顺序查找算法 (1)类型说明 typedef struct( Key ly pe key Info Type otherinfo; ∥此类型依赖于应用 )Node Type typedef Node Type Seqlist[nt+1];/0号单元用作哨兵 武汉理工大学华夏学院-信息工程 系
武汉理工大学华夏学院-信息工程 系 2、顺序查找的存储结构要求 顺序查找方法既适用于线性表的顺序存储结构 也适用于线性表的链式存储结构(使用单链表 作存储结构时,扫描必须从第一个结点开始)。 (1)类型说明 typedef struct{ KeyType key; InfoType otherinfo; //此类型依赖于应用 }NodeType; typedef NodeType SeqList[n+1]; //0号单元用作哨兵 3、基于顺序结构的顺序查找算法
(2)具体算法 int SeqSearch(seqlist r, KeyType k) {在顺序表Rn中顺序查找关键字为K的结点 ∥)功时返回找到的结点位置,失败时返回0 int R|0]key=k;/设置哨兵 for(i=n;R[,key!=k;i-);∥从表后往前找 return i;/若i为0,表示查找失败否则R是要找的结点 )//SeqSearch 武汉理工大学华夏学院-信息工程 系
武汉理工大学华夏学院-信息工程 系 (2)具体算法 int SeqSearch(Seqlist R,KeyType K) { //在顺序表R[1..n]中顺序查找关键字为K的结点, //成功时返回找到的结点位置,失败时返回0 int i; R[0].key=K; //设置哨兵 for(i=n;R[i].key!=K;i--); //从表后往前找 return i; //若i为0,表示查找失败,否则R[i]是要找的结点 } //SeqSearch
(3)算法分析 ①算法中监视哨R0的作用 为了在for循环中省去判定防止下标越界的条件论1,从 而节省比较的时间。 ②成功时的顺序查找的平均查找长度: 在等概率情况下,pi=1/m(1≤还n),故成功的平均查找 长度为:(n+,+2+1)/m=(n+1)2即查找成功时的平均比 较次数约为表长的一半。若k值不在表中,则须进行n+1 次比较之后才能确定查找失败。 武汉理工大学华夏学院-信息工程 系
武汉理工大学华夏学院-信息工程 系 (3)算法分析 为了在for循环中省去判定防止下标越界的条件i≥1,从 而节省比较的时间。 ②成功时的顺序查找的平均查找长度: 在等概率情况下,pi=1/n(1≤i≤n),故成功的平均查找 长度为: (n+…+2+1)/n=(n+1)/2即查找成功时的平均比 较次数约为表长的一半。若k 值不在表中,则须进行n+1 次比较之后才能确定查找失败。 ① 算法中监视哨R[0]的作用
③链表结构的顺序查找算法 设被查数据是一个单链表,其数据类型描述为: Struct Node I elemtype data; struct LNode x next: struct Inode *p*head elemtype data V; /要查找的数据用V表示* 则查找的第一个元素从头开始,最后一个元素 应为指针场为空的结点(结束条件) 算法描述如下: ■〓武六学竿苧院倍心工 系
武汉理工大学华夏学院-信息工程 系 ③ 链表结构的顺序查找算法 设被查数据是一个单链表,其数据类型描述为: Struct LNode { elemtype data; struct LNode * next; } struct lnode *P,*head; elemtype data V; /* 要查找的数据用V表示*/ 则查找的第一个元素从头开始,最后一个元素 应为指针场为空的结点(结束条件). 算法描述如下:
输入待查值Ⅴ P=*head P=空 显示查找不成功 P>da=y显示查找结果 p=P->next 结束 武汉理工大学华夏学院-信息工程 系
武汉理工大学华夏学院-信息工程 系 P=*head 否 否 p=P->next 显示查找不成功 显示查找结果 结束 输入待查值V P=空 P->data=V