博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
转:线性表的查找-顺序查找
阅读量:7199 次
发布时间:2019-06-29

本文共 2185 字,大约阅读时间需要 7 分钟。

转自:http://student.zjzk.cn/course_ware/data_structure/web/chazhao/chazhao9.2.1.htm

 

1 #include "stdafx.h" 2 #include 
3 typedef int KeyType; 4 typedef int InfoType; //此类型依赖于应用 5 typedef struct tagNodeType 6 { 7 KeyType key; 8 InfoType otherinfo; //此类型依赖于应用 9 }NodeType;10 11 static int n = 6;12 typedef NodeType SeqList[]; //0号单元用作哨兵13 14 int SeqSearch(SeqList R, KeyType K)15 {16 //在顺序表R[1..n]中顺序查找关键字为K的结点,成功时返回找到的结点位置,失败时返回017 int index;18 R[0].key = K; //设置哨兵19 for (index = n;R[index].key != K;--index); //从表后往前找20 return index; //若i为0,表示查找失败,否则R[i]是要找的结点21 }22 23 int _tmain(int argc, _TCHAR* argv[])24 {25 SeqList array = {
{
0,0}, {
34,0}, {
45,0}, {
90,0}, {
27,0}, {
88,0}}; // 注意array[0]用作设置哨兵,有效数据从array[1]起始。26 int result = SeqSearch(array, 27);27 system("pause");28 return 0;29 }

 

 

顺序查找(Sequential Search)

     在表的组织方式中,线性表是最简单的一种。顺序查找是一种最简单的查找方法。
1、顺序查找的基本思想
     基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键宇和给定值K相比较。若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。
2、顺序查找的存储结构要求
  顺序查找方法既适用于线性表的顺序存储结构,也适用于线性表的链式存储结构(使用单链表作存储结构时,扫描必须从第一个结点开始)。
3、基于顺序结构的顺序查找算法
(1)类型说明
  typedef struct{
    KeyType key;
    InfoType otherinfo; //此类型依赖于应用
   }NodeType;
  typedef NodeType SeqList[n+1]; //0号单元用作哨兵
(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)算法分析
① 算法中监视哨R[0]的作用
    为了在for循环中省去判定防止下标越界的条件i≥1,从而节省比较的时间。
②成功时的顺序查找的平均查找长度:
   
     在等概率情况下,pi=1/n(1≤i≤n),故成功的平均查找长度为
        (n+…+2+1)/n=(n+1)/2
即查找成功时的平均比较次数约为表长的一半。
     若K值不在表中,则须进行n+1次比较之后才能确定查找失败。
③表中各结点的查找概率并不相等的ASL
顺序查找演示过程
【】
   【例】在由全校学生的病历档案组成的线性表中,体弱多病同学的病历的查找概率必然高于健康同学的病历,由于上式的ASLsq在pn≥pn-1≥…≥p2≥p1时达到最小值。
    若事先知道表中各结点的查找概率不相等和它们的分布情况,则应将表中结点按查找概率由小到大地存放,以便提高顺序查找的效率。
     为了提高查找效率,对算法SeqSearch做如下修改:每当查找成功,就将找到的结点和其后继(若存在)结点交换。这样,使得查找概率大的结点在查找过程中不断往后移,便于在以后的查找中减少比较次数。
④顺序查找的优点
     算法简单,且对表的结构无任何要求,无论是用向量还是用链表来存放结点,也无论结点之间是否按关键字有序,它都同样适用。
⑤顺序查找的缺点
  查找效率低,因此,当n较大时不宜采用顺序查找。

转载于:https://www.cnblogs.com/kira2will/p/3964957.html

你可能感兴趣的文章
Windows7系统中启动Windows Event Log服务提示拒绝访问,错误5的解决方法
查看>>
mybatis--缓存(一级和二级缓存)
查看>>
centos 配置 nginx + fcgiwrap + git
查看>>
Eclipse下Maven打包非法字符问题
查看>>
FreeMarker标签
查看>>
AngularJS 中的 Promise 和 设计模式
查看>>
《从面试题来看源码》,单参数,多参数,如何正确使用@Param
查看>>
《JavaScript设计模式》学习日志
查看>>
MySql 建表、添加字段、修改字段、添加索引SQL语句写法
查看>>
Core Bluetooth框架之三:最佳实践
查看>>
Gson序列化时@SerializedName的使用
查看>>
windows上pip install 报编码错误
查看>>
boost asio学习笔记 [1] - 同步通讯
查看>>
什么是BMC商业模式?
查看>>
不同浏览器中单选框和文字对齐的兼容
查看>>
Python 浮点数在列表中排序的问题
查看>>
一个失业三年后,又重新找回自信的小伙靠的是什么?
查看>>
JFinal学习-Excel导出
查看>>
linuxbridge 小贴士
查看>>
红旗inWise操作系统V8.0发布了!!!
查看>>