5.1、静态查找表
5.1.1 顺序查找
思想:从表的一端开始逐个进行记录关键字和给定值的比较
ASL = (n+1)/2
优点:对线性表逻辑次序和存储结构无要求
缺点:ASL较大,查找效率低
5.1.2 折半查找
思想:low,high,mid分别指向待查元素所在区间的上界、下界和中点,key为给定值
初始时low=1,high = ST.length,mid=(low+high)/2
将mid指向的记录与key比较
ASL = log2(n+1)-1
优点,平均查找长度较小
缺点:只适用于顺序存储的有序表,不适用于顺序表和链式存储结构
5.1.3 分块查找(索引顺序查找)
思想:将查找表分为几块,块内无序,块间有序,先去定待查记录所在块,再在块内查找,先要建立索引表
ASL = Lb + Lw
表结构:分块有序表
存储结构:顺序存储结构,线性链表
5.2 动态查找表
5.2.1 二叉排序树
基本思想:左子树不空,且左子树上所有的结点的值均小于它的根结点的值,右子树不空,有字数上所有的结点的值均大于或等于它的根结点的值。它的左右树本身也是一棵二叉排序树。
性质:二叉排序树具有类似折半查找的性质,又采用了链表结构,中序遍历二叉排序树可以得到一个关键字的有序序列。
ASL = O(log2(n))
二叉排序树的插入
插入在查找不成功时进行,直到找到某个叶子结点的左子树或右子树为空为止,则插入该结点为该叶子结点的左孩子或右孩子。
二叉排序树的删除
删除结点既有左子树又有右子树,有两种解决方法
(1)合并删除
根据二叉排序树的本质,左子树总是小于结点值,右子树总是大于结点值,所以可以找到左子树的最大结点值来代替删除结点,也可以用右子树的最小结点值来代替删除节点。
(2)复制删除
5.3 哈希表
在记录的关键字和记录在表中的存储位置之间建立一个函数对应关系,叫哈希函数
根据设定的哈希函数H(key)和选中的出来冲突的方法,将一组记录按其关键字映射到一个有限的地址连续的地址集上,并以关键字在地址集中的象作为相应记录在表中的存储位置
哈希函数的构造方法
直接定址法
数字分析法
平方区中法
折叠法
除留余数法
随机数法
冲突处理的方法
开放定址法
再哈希法
链地址法