目录

  • 1 课程资料
    • 1.1 课程标准
    • 1.2 教学日历
    • 1.3 说课课件
  • 2 第一章绪论
    • 2.1 本章教学目标
    • 2.2 数据结构简介
    • 2.3 数据结构类型
    • 2.4 算法分析
    • 2.5 本章讲义
    • 2.6 本章测验题
    • 2.7 测验
  • 3 线性结构
    • 3.1 本章教学目标
    • 3.2 线性表
    • 3.3 线性表的顺序存储及运算实现
      • 3.3.1 本节讲义
    • 3.4 线性表的链式存储和 运算实现
      • 3.4.1 本节讲义
    • 3.5 应用
    • 3.6 数组
      • 3.6.1 讲义
    • 3.7 本章测验题
    • 3.8 测验
    • 3.9 作业
  • 4 第三章栈和队列
    • 4.1 本章教学目标
    • 4.2 第一课时栈
      • 4.2.1 讲义
    • 4.3 第二课时队列
      • 4.3.1 讲义
    • 4.4 应用
      • 4.4.1 讲义
    • 4.5 本章测验题
  • 5 第四章串
    • 5.1 第一课时概念
    • 5.2 本章学习目标
    • 5.3 本章测验题
  • 6 第五章树和二叉树
    • 6.1 本章学习目标
    • 6.2 第一课时树的定义及基本术语
    • 6.3 第二课时二叉树定义性质存储
    • 6.4 第三课时二叉树遍历
    • 6.5 第四二叉排序与平衡二叉树
    • 6.6 第五树森林二叉树之间转换
    • 6.7 第六课时哈夫曼树
    • 6.8 本章测验题
    • 6.9 测验
    • 6.10 作业
  • 7 第六章图
    • 7.1 本章学习目标
    • 7.2 第一课时图的基本概念
    • 7.3 第二课时图的存储
    • 7.4 第三课时图的遍历
    • 7.5 第四课时最小生成树
    • 7.6 第五课时最短路径
    • 7.7 第六课时拓扑排序
    • 7.8 第七课时关键路程
    • 7.9 本章测验题
    • 7.10 测验
    • 7.11 作业
  • 8 第七章查找
    • 8.1 本章学习目标
    • 8.2 第一课时顺序查找二分查找
    • 8.3 第二课时哈希表
    • 8.4 本章测验题
    • 8.5 测验
    • 8.6 作业
  • 9 第八章排序
    • 9.1 本章学习目标
    • 9.2 第一课时基本概念
    • 9.3 第二课时插入选择排序
    • 9.4 第三课时交换排序
    • 9.5 第四课时归并 基排序及比较
    • 9.6 本章测验题
    • 9.7 测验
    • 9.8 作业
第一课时顺序查找二分查找

查找表的操作

一查找的基本概念

Ø 查找又称为查询或检索,是在一批记录中依照某个域的指定域值,找出相应的记录的操作。

Ø 在计算机中,被查找的数据对象是由同一类型的记录构成的集合,可称之为查找表(search table)。

Ø 在实际应用问题中,每个记录一般包含有多个数据域,查找是根据其中某一个指定的域进行的,这个作为查找依据的域称为关键字(key)。

9.1 静态查找表

Ø 抽象数据类型静态查找表的定义:

    ADT  StaticSearchTable{

   基本操作P:  Create(&ST,n); Destroy(&ST);

      Search(ST,key);Traverse(ST,Visit());

     } ADT  StaticSearchTable

一、顺序查找

Ø 顺序查找的基本思想是:

从线性表的一端开始,依次将扫描到得结点关键字和给定值K相比较。若当前扫描到得结点关键字与K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。

Ø 顺序查找的存储结构要求:

 顺序查找方法既适用于线性表的顺序存储结构,也适用于线性表的链式存储结构(使用单链表作为存储结构时,扫描必须从第一个结点开始),顺序查找对数据在表中存放的先后次序没有任何要求。

顺序查找的算法:

int Search_seq(SSTable ST[ ],  int n,  int key)

 { int  i=n;

   ST[0].key=key;

  for( i=ST.length; ST.elem[ i ].key!=key;  - - i  );/*从表尾往前查*/

   return i;

}

二、有序表的查找(折半查找)

Ø 折半查找(Birary search)也称为二分查找,它的查找速度比顺序查找快,但它要求数据在线性表中按查找的关键字域有序排列。

Ø n个数据存放于数组r中,且已经过排序,按由小到大递增的顺序排列。

Ø 采用二分查找,首先用要查找的给定值k与表正中间元素的关键值相比较,此元素的下标:

二分查找的性能分析

Ø 查找成功时进行比较的

    关键字个数最多不超过

    树的深度ëlog2nû +1

Ø n较大时,平均查找长度为

     ASLbs= log2( n+1) 1

三、静态树表的查找

当有序表中各记录的查找概率相等时,按照判定树描述的查找过程来进行折半查找,性能最优;

    有序表中各记录的查找概率不等时,二分查找性能不一定最优。

 可由具体例子说明。

 静态最优查找树和次优查找树方法可解决这一问题。

四、分块查找(索引顺序查找)

这是一种顺序查找的另一种改进方法。

先让数据分块有序,即分成若干子表,要求每个子表中的数值(用关键字更准确)都比后一块中数值小(但子表内部未必有序)。

然后将各子表中的最大关键字构成一个索引表,表中还要包含每个子表的起始地址(即头指针)