数据结构期末总结

数据结构

题型题数分值
选择1020
填空1020
判断1020
综合应用420
算法220

第一章 绪论

逻辑结构:

  • 集合结构 仅属同一集合
  • 线性结构 一对一
  • 树结构 一对多
  • 图结构 多对多 、

物理结构

亦称存储结构,是数据的逻辑结构在计算机存储器内的表示(或映像)。它依赖于计算机。

算法的五个基本特性

  • 输入:一个算法有零个或多个输入。
  • 输出 :一个算法有一个或多个输出。
  • 有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
  • 确定性:算法中的每一条指令必须有确切的含义,在任何条件下,只有唯一的一条执行路径,即对于相同的输入只能得到相同的输出。
  • 可行性:算法描述的操作可以通过已经实现的基本操作执行有限次来实现。

算法设计的要求

  • 正确性
  • 可读性
  • 健壮性
  • 高效性

第二章 线性表

存储结构 比较项目顺序表链表
存储空间预先分配,会导致空间闲置或溢出现象动态分配,不会出现存储空间闲置或溢出现象
存储密度不用为表示结点间的逻辑关系而增加额外的存储开销,存储密度等于1需要借助指针来体现元素间的逻辑关系,存储密度小于1
存取元素随机存取,按位置访问元素的时间复杂度为O(1)顺序存取,按位置访问元素时间复杂度为O(n)
插入删除平均移动约表中一半元素,时间复杂度为O(n),插入一个元素需要平均移动** n 2 \frac{n}{2} 2n个元素,删除一个元素需要平均移动 n − 1 2 \frac{n-1}{2} 2n1**个元素不需移动元素,确定插入、删除位置后,时间复杂度为O(1)
适用情况① 表长变化不大,且能事先确定变化的范围 ② 很少进行插入或删除操作,经常按元素位置序号访问数据元素① 长度变化较大 ② 频繁进行插入或删除操作

第三章 栈和队列

栈:先进后出

队列:先进先出

  • 栈满 S.top-S.base==S.stacksize
  • 栈空 base == top
  • 循环入队: sq[rear]=x; rear=(rear+1)%M
  • 循环出队:x=sq[front]; front=(front+1)%M
  • 循环队列满 (rear+1)% M==front
  • 循环队列空 front==rear

第四章 串、数组和广义表

image-20221022171543712

第五章 树和二叉树

二叉树性质

  • 在二叉树的第i层上至多有2i-1个结点

  • 第i层上至少有 1 个结点

  • 深度为k的二叉树至多有2K-1个结点

  • 深度为k的二叉树至少有 k 个结点

  • 对于任何一棵二叉树T,如果其叶子结点数为n0,度为2的结点数为n2,则n0=n2+1

完全二叉树

image-20221018223937152

树与二叉树之间的转换

树转换为二叉树

image-20221018224124637

将二叉树转换成树

image-20221018224202988

森林转为二叉树

image-20221018224228681

二叉树转换为森林

image-20221018224303307

哈夫曼树 哈夫曼编码

image-20221018224402834

第六章 图

最小生成树

Kruskal(克鲁斯卡尔)算法(不能画圈)
  • 归并边,适于稀疏网
  • 时间复杂度:O(eloge)
  • 存储表示: 邻接表
Prim(普里姆)算法 (画圈)
  • 归并顶点,与边数无关,适于稠密网
  • 时间复杂度:O(n2)
  • 存储表示: 邻接矩阵
算法名普里姆算法克鲁斯卡尔算法
时间复杂度O(n2)O(eloge)
适应范围稠密图稀疏图

最短路径

Dijkstra算法思想
先找出从源点v0到各终点vk的直达路径(v0,vk),即通过一条弧到达的路径。
从这些路径中找出一条长度最短的路径(v0,u),然后对其余各条路径进行适当调整:
若在图中存在弧(u,vk),且(v0,u)+(u,vk)<(v0,vk),则以路径(v0,u,vk)代替(v0,vk)。
在调整后的各条路径中,再找长度最短的路径,依此类推

image-20221018220415382

关键路径

  • 关键路径长度是整个工程所需的最短工期

image-20221018220828462

事件vj的最早发生时间Ve(j)

image-20221018221133480

事件vi的最迟发生时间Vl(i)

image-20221018221235613

活动as的最早开始时间e(s)

image-20221018221334517

活动as的最迟开始时间l(s)

image-20221018221428169

例题

第七章 查找

image-20221022174425355

查找名称最好情况最坏情况平均情况
顺序查找O(1)O(n) n + 1 2 \frac{n+1}{2} 2n+1(平均查找次数)
折半查找O(logn)
分块查找O(logn)
二叉排序树查找O(logn)

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

image-20221018205917286

  • 当对一个线性表R[60]进行索引顺序查找(分块查找)时,若共分成了10个子表,每个子表有6个表项。假定对索引表和数据子表都采用顺序查找,则查找每一个表项的平均查找长度为( 9 ) 。

平衡二叉树

  • 性质:任一结点的平衡因子只能取:-1、0 或 1;如果树中某个结点的平衡因子的绝对值大于1,则这棵二叉树就失去平衡,不再是AVL树

image-20221018201656544

LL型(右旋转)

image-20221018202225776

RR型(左旋转)

image-20221018202245119

LR型
  • 先进行一次左旋转变成LL型,再进行一次右旋转

image-20221018202620760

RL型
  • 先进行一次右旋转变成RR型,再进行一次左旋转

image-20221018202138731

散列表

散列函数构造方法:

  • 数字分析法
  • 平方取中法
  • 折叠法
  • 除留余数法
处理冲突

处理冲突的方法:

  • 开放定址法
  • 再散列法
  • 链地址法
  • 建立一个公共溢出区

开放定址法:
方法:当冲突发生时,形成一个探查序列;沿此序列逐个地址探查,直到找到一个空位置(开放的地址),将发生冲突的记录放到该地址中,即Hi=(H(key)+di)MOD m, i=1,2,…,k(k <=m-1)
H(key)—散列函数,m —散列表表长,di —增量序列
分类
线性探测再散列: di =1,2,3,…,m-1
二次探测再散列: di =1²,-1²,2²,-2²,3²,…,±k²(k<=m/2)
伪随机探测再散列: di =伪随机数序列

image-20221018222056260

再散列法:

方法:构造若干个散列函数,当发生冲突时,计算下一个散列地址,即:Hi=RHi(key) i=1,2,…,k
RHi—不同的散列函数
特点:计算时间增加

链地址法
方法:将所有关键字为同义词的记录存储在一个单链表中,并用一维数组存放头指针

image-20221018204849769

建立一个公共溢出区
除设立散列基本表外,另设立一个溢出向量表。所有关键字和基本表中关键字为同义词的记录,不管它们由散列函数得到的地址是什么,一旦发生冲突,都填入溢出表。

第八章 排序

image-20221022174000471

image-20221022173831162

image-20221018222825920

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kdcarry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值