代码改变世界

第七章学习小结

2019-06-02 23:56  Buki  阅读(285)  评论(0编辑  收藏  举报

  本章学习的是数据查找。个人感觉这一章的知识相比于之前的章节更加贴切实际操作。

  目录:

  (一) 查找的基本概念

  (1)查找表

  查找表是由同一类型的数据元素(或记录)构成的集合,它是一种非常灵变的数据结构,涉及的数据结构主要有线性表,树表以及散列表。

  (2)关键字

  关键字是数据元素(或记录)中某个数据项的值,可以标识一个数据元素。关键字又分两种,可以唯一标识一个记录的关键字被称为主关键字;可以识别若干记录的关键字被称为次关键字。

  (3)查找

  查找是指根据给定的某个值,在查找表中确定一个其关键字等于给定值的记录或者数据元素。若存在这样一个记录,则称为查找成功;若不存在这样一个记录,则称为查找失败。

  (4)查找表的种类

  查找表分为动态查找表和静态查找表。在查找的同时进行插入和删除工作的叫做动态查找表,反之则称为静态查找表。

  (5)平均查找长度

  平均查找长度简称ASL,是和给定值进行比较的关键字个数的期望值。

  

  (二)线性表的查找

  (1)顺序查找

  从表的一段开始,依次将记录的关键字和给定值进行比较,既适用于线性表的线性储存结构,又适用于线性表的练市存储结构,改良后的算法加入监视哨,将str[0]置为key。ASL = (n+1)/ 2

  (2)折半查找

  采用该方法有一下几点前提:

  (i)必须采用数据顺序存储结构

  (ii)表中元素按照关键字有序排列

  折半查找法在每一次查找都会使查找范围缩小一半,提高了查找的效率。下图为折半查找方法的查找过程(找21):

 

 

 

ASL = log2(n) (注意是有序查找)

 

 

(三)树表的查找

  (1)二叉排序树(又称二叉查找树)

  定义如下:

  (i)若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值。

  (ii)若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值。

  (iii)它的左右子树也分别为二叉排序树

  然后对二叉排序树的操作主要有查找,插入,创建和删除。

  其中,查找,插入和创建均可以通过递归来实现,这四种操作中最难的是删除,删除又分三种情况:

  (i)f -> lchild = NULL 左右子树均为空树

    (ii)  f -> lchild = p -> lchild  一边为空树

    (iii) f ->lchild = p ->lchild; s ->rchild = p ->rchild (或者 p -> data = s ->data; q ->rchild = s ->lchild)  左右子树均不为空树

 

  (2)平衡二叉树(改良版的二叉排序树)

  先明白一个定义:平衡因子是该结点左子树和右子树的深度之差,取值可能是-1,0, 1。

  有以下特点:

  (i)左子树和右子树的深度之差的绝对值不超过1。

  (ii)左子树和右子树也是平衡二叉树。

  后面的B-树,B+树还有散列表还没有吃透,个人觉得还是有点难度的。

  网安的进度渐渐地赶上了。

  最近期末的时间开始有点紧张了,而且又要开始复习了,希望下一阶段可以安排好自己的学习时间,认真复习,保住绩点!