数据结构期末复习

章节知识点分析

第一章绪论

基本概念

  • 数据

  • 数据元素(记录、表目,是数据集合中一个个体)

  • 数据项:一个数据元素可由若干数据项组成

  • 数据对象:性质相同的数据元素的集合,是数据的一个子集

  • 数据结构:带结构的数据元素集合

    • 包括(D:元素集合、S:D上的关系、Op:D上的运算)
  • 逻辑结构:数据元素之间的逻辑关系,与计算机无关

    • 包括(D,S)

四种基本的逻辑结构:

  • 集合结构
  • 线性结构
  • 树形结构
  • 图状结构
  • 存储结构(物理结构):指数据的逻辑结构在计算机存储器中的映像表示。
    • 用二进制位串表示数据元素。元素映像叫结点,数据项映像叫数据域。

四种不同的存储结构

  • 顺序存储结构
  • 链式存储结构
  • 哈希存储结构
  • 索引存储结构
  • 算法:建立在数据结构基础上的、求解问题的一系列确切的步骤
    • 五个特性:有穷性、确定性、可行性、输入、输出
    • 性能指标:正确性、可读性、健壮性、高效率与低存储需求
    • 事前估计:空间复杂度、时间复杂度
      • 时间复杂度有最坏、最好、平均等。
      • 原地算法:空间复杂度O(1)、存储密度:数据本身存储量/实际所占存储量

题型

  • 基本概念的填写
  • 复杂度分析

第二章线性表(线性逻辑结构)

线性表:在数据元素的非空有限集中

  • 数据元素在表中的位置只取决于其序号
  • 除第一个和最后一个、每个数据元素均只有一个前驱和后驱。存在唯一第一个和最后一个

基础是用顺序表存储(存储结构)。
数据结构期末复习_第1张图片

单链表(存储结构)

注意区分有无头结点的情况
当无头结点时,考虑是否需要对头元素做特殊处理

  • 单循环链表:最后一个的尾指针是第一个(或空表头)
  • 双向链表:也可是双向的循环

数据结构期末复习_第2张图片

静态链表用数组模拟链表,逻辑上像链表,物理上看是数组。
采用结构体创建带数据域和指针域(整数)的结构,使用这种结构构成数组。

题型

主要是一些实现特定操作的算法题

第三章栈与队列(逻辑结构)

  • 栈:先进后出(栈顶top、栈底bottom、入栈出栈push\pop)

  • 栈也可以由顺序存储结构或链式存储结构实现(不同的存储结构)

  • 八股:n个元素依次入栈,最多可以得到的合法序列数 ( 2 n ) ! / [ ( n + 1 ) ! ∗ n ! ] (2n)!/[(n+1)!*n!] (2n)!/[(n+1)!n!]

  • 应用:递归算法(保存现场变量)、整数表达式求值

  • 队列:先进先出

  • 链式可以是循环队列、逻辑上的优化可以是双端队列。

题型

  • 递归相关计算
  • 操作合法性、出入序列合法性

第四章字符串和模式匹配

  • 存储
    • 静态就是数组存储
    • 动态就是申请空间或链式结构存储
  • 模式匹配
    • 目标:原始串、模式:需要找到的子串、结果:第一次匹配到的位置

KMP算法

复杂度:(m+n)
数据结构期末复习_第3张图片数据结构期末复习_第4张图片

KMP算法思想
当模式串j位成功匹配或j=0时,i j同时自增,否则j回退到next[j]记录的位置,重新比较。
next数组求解
k=0或当前位置能匹配上,下一个位置记录k+1,否则k回溯到next[k]

修正
数据结构期末复习_第5张图片
数据结构期末复习_第6张图片
对于next数组的修正,若当前位置可以匹配,本来是直接填写下一个位置的值的,但现在需要检查下一个位置的值是否和k位置相同,若相同则填写next[k]的值,不直接写k

题型

模拟KMP算法求Next数组,注意记录关键点在于时刻明确k的值。

第五章数组和广义表

数组本质上就是线性表,下标有确定的转化关系

矩阵的压缩存储

  • 对称矩阵
    数据结构期末复习_第7张图片

  • 带状矩阵

数据结构期末复习_第8张图片数据结构期末复习_第9张图片

以对角线元素为中心,其确定每行中心位置,同行元素按照原来的相对中心的位置分布。

  • 稀疏矩阵
    • 三元组表
      数据结构期末复习_第10张图片

    • 十字正交链表
      数据结构期末复习_第11张图片

广义表

广义表的定义是递归的
数据结构期末复习_第12张图片
数据结构期末复习_第13张图片
注意表头表尾是一对相对概念。
正常情况下只有取表头能取出原子。

存储方式一:表头表尾分法
数据结构期末复习_第14张图片数据结构期末复习_第15张图片

存储方式二:孩子兄弟兄弟分法(扩展的线性链表)
数据结构期末复习_第16张图片数据结构期末复习_第17张图片

题型

  • 矩阵压缩下角标对应关系、三元组表或十字链表表示
  • 广义表取表头表尾、相关操作(递归)
    • 取头、取尾、求长度、深度等
    • 头尾链表存储形式、扩展的线性链表形式

第六章树与二叉树

数据结构期末复习_第18张图片

度之和==结点数之和+1
完全二叉树中,双亲和左右孩子的序号有明确对应关系2i 2i+1
消除尾递归:想办法把尾递归改成迭代形式。
数据结构期末复习_第19张图片
数据结构期末复习_第20张图片

数据结构期末复习_第21张图片

WPL:带权路径长度之和。使WPL最小的数是哈夫曼树树。(路径长度是层数减1,根层数为1)
哈夫曼不等长,是前缀编码,没有度为1的结点。结点总数为2n-1
树转化为二叉树:根无右子树,左支是孩子,右支是兄弟。树/森林的先、后序对应二叉树的先、中序。

并查集,互不相交的集合。
使用树或数组表示。通常包括合并和查找操作。(通常选出一个代表做根)
合并时,为了防止退化树的出现,通常使用加权合并的方式(结点数大的做双亲)。
数据结构期末复习_第22张图片

题型

  • 树的遍历序、树的相关算法
  • 并查集相关操作。

第七章图

图的基本概念

  • 顶点
  • 无向图、有向图
  • 权、网(边、弧带权的图)
  • 邻接:顶点间关系、关联:边关联于两个顶点
  • 子图、生成子图:由图的全部顶点和部分边组成
  • 路径、回路、简单路径、简单回路(加上简单后,除起点和终点外其它点不同)
  • 连通图:无向图中,任何一对顶点间都存在路径
    • 强连通分量:无向图中的极大连通子图 (加强说明对应有向图范畴)
  • 生成树:包含全部顶点的极小连通子图

图的存储结构

  • 邻接矩阵:矩阵(i,j)表示i-j的路径
  • 邻接表:顶点数组+边链表
    数据结构期末复习_第23张图片
  • 关联矩阵:定点数*边数的矩阵
  • 十字链表:同时有指向入边集合和出边集合的链
  • 邻接多重表

图的遍历

深度优先和广度优先(每个顶点只能访问一次)

对于图而言,深度优先遍历可以判断其是否有环。

图的联通性

一个图的生成树不唯一,一般广度优先生成树的高度更小。

强连通分量求法
数据结构期末复习_第24张图片
数据结构期末复习_第25张图片
深搜+逆序编号
反边+按编号从大到小深搜,每一次新开的搜索集合属于同一个强连通分量。

最小生成树
Prim算法:(在不形成环的基础上),每次挑出以连通部分到未连通部分最小的边。
Kruskal算法:在不形成环的基础上,每次挑出所有边中最小的一个加入。

有向无环图的应用

有向无环图DAG:AOV网络:表示活动执行次序;AOE网络:有向边定义活动进行所需时间

拓扑排序:每次取出入度(出度)为0的顶点。
当使用深搜实现时,要注意只适用于有向无环图。

关键路径:AOE网中,进入顶点v的事件全部发生,v才可以开始。
关键路径长度==最短工期。
关键路径加快可以缩短工期

  • 步骤一:求所有事件(顶点)发生的最早时间(依赖于拓扑排序,按照排序结果依次求解)
  • 步骤二:求所有事件发生的最迟时间(先设置为最早时间,再遍历所有后继邻接点,找到最迟时间。依赖于逆向拓扑排序,按照逆向拓扑排序顺序依次求解)
  • 步骤三:根据事件(顶点)的最早开始和最迟结束时间。计算每条边的最早开始和最迟开始时间,二者相等的为关键路径上的边。
    数据结构期末复习_第26张图片
    注意前两步是利用拓扑排序求出顶点的最早和最迟时间。第三步需要求边的最早开始和最迟开始时间。也就是起点的最早(终点最迟-边长)

最短路径

问题对象:有向网络
典型问题:单源最短路径:迪杰斯特拉、贝尔曼福德
多源:弗洛伊德、Johnson

迪杰斯特拉:按路径长度递增(以连通集合出发的边)依次产生个顶点最短路径。(不断松弛未确定的点集距离)
Floyd:二维矩阵存距离,依次增加可供做桥梁的中间点集。数据结构期末复习_第27张图片

第八章查找

基本概念和术语

平均查找长度:ASL=所有记录查找的概率和比较次数乘积之和

  • 顺序表查找
    数据结构期末复习_第28张图片

  • 二分查找(注意ASL求法)
    数据结构期末复习_第29张图片

  • 静态树的查找

    类似二分,构造成树的样子,每次和根比较后,就可以确定在左子树或是在右子树。
    静态最优查找树:带权内路径长度之和最小。(与ASL成正比)
    次优查找树,构造开销更小。通过找到使两侧概率和尽可能相等的元素为根。

  • 分块查找
    数据结构期末复习_第30张图片

    每块中记录个数为根号n时,ASL最小=根号n+1。

  • 二叉排序树

    • 类似静态二叉树
    • 构建、查找、插入(新节点一定是叶)
    • 删除
      数据结构期末复习_第31张图片
  • 平衡二叉树

    • 解决上一种中会出现退化树的问题。
    • 保证左右子树高度差的绝对值不超过1
    • 插入时需要调整
      数据结构期末复习_第32张图片数据结构期末复习_第33张图片
      数据结构期末复习_第34张图片

注意:同侧只涉及两个结点主动换位置。异侧涉及三个结点。其它子节点保持原组合,放到合适的位置。
删除时,若有两个孩子,则找前驱或后继代替。破坏平衡性则旋转恢复。

平衡二叉树的关键是通过旋转保证平衡性。

  • B树

    • 多路平衡查找树,应用于文件系统
    • m阶指每个结点最多m棵子树,非终端节点最少m/2棵子树。
    • 结构体为(n,n个分割关键字和n+1个子树指针)
    • 所有叶子结点在同一层上且不带信息。
    • 例题数据结构期末复习_第35张图片
    • 查找类似二叉树。
    • 插入时,直接插入到合适位置,出现结点满的情况则从中间分裂为两个结点,中间关键字上浮。
    • 删除时:替、借、并,分别应对破坏原结构的情况。
    • 最大层数L= log ⁡ m / 2 上整 ( ( N + 1 ) / 2 ) + 1 \log_{m/2上整} ((N+1)/2)+ 1 logm/2上整((N+1)/2)+1
      数据结构期末复习_第36张图片
  • 哈希表

    • 设计过程包括:明确空间范围、确定合理函数、设计冲突处理方法。
    • 冲突解决:
      • 再散列,di序列依次加直到找到空地址。
      • 再哈希:采用多个函数,冲突就换下一个,直到找到空地址。
      • 链地址:每个哈希地址建立单链表。
      • 建立公共溢出区
        *例题
        数据结构期末复习_第37张图片

    注意查找成功、不成功时ASL的计算方法。装填因子的含义。

第九章内部排序

基本概念和术语

  • 插入排序

    • 分成已排好和未排序两部分。每次将未排序第一个插入到已排序合适位置。
    • 改进:折半查找、2路插入
    • 希尔排序:划分增量d,不断减小d进行多轮排序,直到d=1(用不同的方法划分有序段)
      数据结构期末复习_第38张图片
  • 交换排序

    • 冒泡、双向起泡(相邻两趟向不同方向走)
    • 快速排序:分治,定基准。挖坑,填坑。
      数据结构期末复习_第39张图片
  • 选择排序

    • 简单选择排序:从n个里面选最小的和第1个交换
    • 树形排序:建立比较树方便找出最小元素
    • 堆排序:初始树->小根堆,删除根后->调整为小根堆(最后元素替代原根,下沉)
    • 后两种优化本质上都是在寻找无序区最值元素!
  • 并归排序

    • 将两个或两个以上的同序序列并归成一个序列
    • 时间复杂度nlogn,很少用于内部排序
    • 自然并归,从自然有序段而不是单个元素开始并归
      • 两路自然并归:后部分用逆序自然序生成初始段。
  • 基数排序

    • 分配+收集(分别按照不同的标准)
      数据结构期末复习_第40张图片

算法比较
数据结构期末复习_第41张图片

关键例题
数据结构期末复习_第42张图片

第十章外部排序

  • 并归排序
    • 多路平衡并归

      • 利用败者树从k路中选取最小的
    • 置换-选择排序
      数据结构期末复习_第43张图片

    • 磁盘排序

      • 最佳并归:对于长度不等的初始并归段,哈夫曼建树。
      • 有时需要补虚段
      • 数据结构期末复习_第44张图片

数据结构期末复习_第45张图片

注意io包括了I的次数和o的次数,10000/200*2=100

例题:主要是IO次数的计算
数据结构期末复习_第46张图片

你可能感兴趣的:(数据结构)