本章学习的是数据查找。个人感觉这一章的知识相比于之前的章节更加贴切实际操作。
目录:
(一) 查找的基本概念
(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+树还有散列表还没有吃透,个人觉得还是有点难度的。
网安的进度渐渐地赶上了。
最近期末的时间开始有点紧张了,而且又要开始复习了,希望下一阶段可以安排好自己的学习时间,认真复习,保住绩点!