数据结构-查找

平均查找长度

在这里插入图片描述

顺序查找


typedef struct //查找表的数据结构
{
    ElemType *elem;  //元素存储空间0号为留空
    int TableLen; // 表的长度
    /* data */
}SSTable;
int Seacher_Seq(SSTable ST,ElemType key){
        ST.elem[0]=key;  // 哨兵
        for(i=ST.TableLen;ST.elem[i]!=key;--i){ // 重后往前找
                return i; //若表中不存在关键字为key的元素,将查找到i为0时退出for循环.
        }

}

成功:ASL=(1+n)/2
失败:ASL=n+1

折半查找

适合于有序的表

在这里插入图片描述
折半查找有 一个最小的生成树:
在这里插入图片描述

来练习一道
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
失败结单很特殊,不是树的高度,而是高度减一
第二题
在这里插入图片描述
在这里插入图片描述

分块查找

在这里插入图片描述
在这里插入图片描述
s = n^(1/2)时有ASL最小值为n ^(1/2)-1

树形查找

二叉排序树(BST)

定义:
在这里插入图片描述
查找算法:
在这里插入图片描述
插入算法:
在这里插入图片描述
二叉排序树的构造:
在这里插入图片描述

二叉排序树的删除☆:
在这里插入图片描述

在这里插入图片描述
思考:若在二叉排序树中删除并插入某结点,得到的二叉排序树和原来的相同嘛?
答:可能相同,可能不同.

查找效率分析:

在这里插入图片描述
还是通过高度来算ASL 每个结点高度的总和除总的个数

平衡二叉树

要会构造平衡二叉树,要学会手删节点
平衡因子是左子树高度减右子树高度
在这里插入图片描述
在这里插入图片描述
平衡二叉树的插入:
为了保证平衡二叉树的平衡要对不平衡的因子进行调整,调整有以下四种情况
情景一:
在这里插入图片描述

情景二:
在这里插入图片描述
在这里插入图片描述

情景三:
在这里插入图片描述
情景四
在这里插入图片描述
注意: LR和RL旋转时,新结点究竟是插入C的左子树还是插入C的右子树不影响旋转过程,而图7.13和图7.14中以插入C的左子树中为例。

练习来了
假设关键字序列为{15,3,7,10,9,8}
在这里插入图片描述

平衡二叉树的删除

w结点进行删除
删除之后找到 不平衡的点 z
yz最高的子树
xy最高的子树
于是有以下情况:
在这里插入图片描述例子:
在这里插入图片描述
平衡二叉树的一个性质:
假设Nh表示深度为h的平衡二叉树含有最少节点数
在这里插入图片描述

来两道题:
在这里插入图片描述
在这里插入图片描述

来继续做题:

在这里插入图片描述
答:在这里插入图片描述

在这里插入图片描述
答:在这里插入图片描述

>
答:在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
答:在这里插入图片描述

B树和B+树

m阶B树
树中每个结点至多有m颗子树,至多有m-1个关键字,比如说三阶 B树就每个结点最多有三个子树,有两个关键字.

B树的插入
(1)没满直接加入
(2)关键字满的情况:
在这里插入图片描述
B树的删除
在这里插入图片描述
在这里插入图片描述

B树
会做这两道题就行:

在这里插入图片描述
在这里插入图片描述

第二题:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

散列表

散列表构造方法

1.直接定值法
直接排,或者通过一些运算排
在这里插入图片描述
2.除留余数法
在这里插入图片描述
3.数字分析法
在这里插入图片描述
就想电话号码15246721696 支取后面4位

4.平方取取中法

在这里插入图片描述
比如说:1310x1310=176100 取761这几位

冲突的方法

开放定址法: 线性探测法,平方探测法,
1.线性探测法,被占用了按顺序找下一个空位.☆☆
2.平方探测法.被占用了移动Di=0²,1²,-1²,2²,-2²,....,k²,-k² 直到找到空位为止.

拉链法:
在这里插入图片描述
要学会算它的ASL,

例如:{19,14,23,01,68,20,84,27,55,11,10,79}来看用除留余数法H(key)=key%13,和线性探测法
在这里插入图片描述
算ASL的办法把所有比较的次数画成表:
在这里插入图片描述

做题:
在这里插入图片描述
失败的ASL呢?
来做一个好的题目:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值