知识大全 查找-线性表的查找-顺序查找

Posted 结点

篇首语:满堂花醉三千客,一剑霜寒十四洲。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 查找-线性表的查找-顺序查找相关的知识,希望对你有一定的参考价值。

  顺序查找(Sequential Search)

  在表的组织方式中 线性表是最简单的一种 顺序查找是一种最简单的查找方法

   顺序查找的基本思想

  基本思想是 从表的一端开始 顺序扫描线性表 依次将扫描到的结点关键宇和给定值K相比较 若当前扫描到的结点关键字与

  K相等 则查找成功;若扫描结束后 仍未找到关键字等于K的结点 则查找失败

   顺序查找的存储结构要求

  顺序查找方法既适用于线性表的顺序存储结构 也适用于线性表的链式存储结构(使用单链表作存储结构时 扫描必须从第一个

  结点开始)

   基于顺序结构的顺序查找算法

  ( )类型说明

  typedef struct

  KeyType key;

  InfoType otherinfo; //此类型依赖于应用

  NodeType;

  typedef NodeType SeqList[n+ ]; // 号单元用作哨兵

  ( )具体算法

  int SeqSearch(Seqlist R KeyType K)

   //在顺序表R[ n]中顺序查找关键字为K的结点

  //成功时返回找到的结点位置 失败时返回

  int i;

  R[ ] key=K; //设置哨兵

  for(i=n;R[i] key!=K;i ); //从表后往前找

  return i; //若i为 表示查找失败 否则R[i]是要找的结点

   //SeqSearch

  注意

  监视哨设在高端的顺序查找【参见练习】

  ( )算法分析

  ① 算法中监视哨R[ ]的作用

  为了在for循环中省去判定防止下标越界的条件i≥ 从而节省比较的时间

  ②成功时的顺序查找的平均查找长度

  

>

  在等概率情况下 p i = /n( ≤i≤n) 故成功的平均查找长度为

  (n+…+ + )/n=(n+ )/

  即查找成功时的平均比较次数约为表长的一半

  若K值不在表中 则须进行n+ 次比较之后才能确定查找失败

  ③表中各结点的查找概率并不相等的ASL

  【例】在由全校学生的病历档案组成的线性表中 体弱多病同学的病历的查找概率必然高于健康同学的病历 由于上式的ASL sq

  在p n ≥p n ≥…≥p ≥p 时达到最小值

  若事先知道表中各结点的查找概率不相等和它们的分布情况 则应将表中结点按查找概率由小到大地存放 以便提高顺序查找的效率

  为了提高查找效率 对算法SeqSearch做如下修改 每当查找成功 就将找到的结点和其后继(若存在)结点交换 这样 使得查

  找概率大的结点在查找过程中不断往后移 便于在以后的查找中减少比较次数

  ④顺序查找的优点

  算法简单 且对表的结构无任何要求 无论是用向量还是用链表来存放结点 也无论结点之间是否按关键字有序 它都同样适用

  ⑤顺序查找的缺点

  查找效率低 因此 当n较大时不宜采用顺序查找

cha138/Article/program/sjjg/201311/23867

相关参考