顺序查找

1、一般线性表的顺序查找

      》》 基本思想:从线性表的一端开始,逐个检查关键字是否满足给定的条件。若查找到

              某个元素的关键字满足给定条件,则查找成功,返回该元素在线性表中的位置;

               若已经查找到表的另一端,还没有查找到符合给定条件的元素,则返回查找失败

              的信息。

       》》 下面的简单的算法实现,【引入了“ 哨兵 ”】

typedef struct{                   // 查找表的数据结构
   ElemType  *elem;               // 元素存储空间基址,建表时按实际长度分配,0号单元留空
   int  TableLen;                 // 表的长度[从1号单元开始计数]           
}SSTable;

// 在顺序表 ST 中顺序查找关键字为 key 的元素。若找到则返回该元素在表中的位置
int Search_Seq(SSTable ST , ElemType key){
    
       // 将即将需要查找的关键字放在 ST 的第 0 个位置,作为 “ 哨兵 ”
       ST.elem[0] = key ;

       // 记录查找到的元素在查找表中的位置
       int location ;
 
        // 循环遍历查找表中的数据,判断是否存在需要的 key
        for(  location = ST.TableLen ; ST.elem[location] != key ; --location ){
            

        }

        //返回 location 
        //如果 location 此时的值为 0 , 则表示在表中没有查找到
        //如果 location 此时的值为 非0 , 则表示在表中查找到了所需要的元素
         
        return location ; 

}

     补充1:在上面的算法中,ST.elem[0] 称为“ 哨兵” 。引入的目的是为了使得 Search_Seq 内的循环不必判断

               数组是否会越界,因为当满足 location = 0 的时候,循环一定会跳出。

     补充2:通过引入“ 哨兵 ” ,可以避免很多不必要的判断语句,从而提高程序效率

 》》 顺序查找的缺点:当 n 较大的时候,平均查找长度较大,效率低;

                           优点:对数据元素的存储没有要求,顺序存储或者链式存储皆可。

2、有序表的顺序查找

  》》 基本思想:假设表 L 是按关键字从小到大排列的,查找的顺序是从前往后查找,待查找元素的关键字为

          key , 当查找到第 i 个元素时,发现第 i 个元素对应的关键字小于  key , 但是第 i + 1 的元素对应的关键

          字大于 key ,这时就可以返回查找失败的信息了,因为第 i 个元素之后的关键字均大于 key ,所以表中

          不存在关键字为 key 的元素。

   》》 注意:“ 有序表的顺序查找 ”与 “ 折半查找(二分查找)”的思想是不一样的,而且有序表的顺序查找中

          的线性表可以是链式存储结构的。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小达人Fighting

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值