数据结构期末复习

news2024/9/28 19:52:22

章节知识点分析

第一章绪论

基本概念

  • 数据

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

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

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

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

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

    • 包括(D,S)

四种基本的逻辑结构:

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

四种不同的存储结构

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

题型

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

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

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

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

基础是用顺序表存储(存储结构)。
在这里插入图片描述

单链表(存储结构)

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

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

在这里插入图片描述

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

题型

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

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

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

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

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

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

  • 队列:先进先出

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

题型

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

第四章字符串和模式匹配

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

KMP算法

复杂度:(m+n)
在这里插入图片描述在这里插入图片描述

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

修正
在这里插入图片描述
在这里插入图片描述
对于next数组的修正,若当前位置可以匹配,本来是直接填写下一个位置的值的,但现在需要检查下一个位置的值是否和k位置相同,若相同则填写next[k]的值,不直接写k

题型

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

第五章数组和广义表

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

矩阵的压缩存储

  • 对称矩阵
    在这里插入图片描述

  • 带状矩阵

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

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

  • 稀疏矩阵
    • 三元组表
      在这里插入图片描述

    • 十字正交链表
      在这里插入图片描述

广义表

广义表的定义是递归的
在这里插入图片描述
在这里插入图片描述
注意表头表尾是一对相对概念。
正常情况下只有取表头能取出原子。

存储方式一:表头表尾分法
在这里插入图片描述在这里插入图片描述

存储方式二:孩子兄弟兄弟分法(扩展的线性链表)
在这里插入图片描述在这里插入图片描述

题型

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

第六章树与二叉树

在这里插入图片描述

度之和==结点数之和+1
完全二叉树中,双亲和左右孩子的序号有明确对应关系2i 2i+1
消除尾递归:想办法把尾递归改成迭代形式。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

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

并查集,互不相交的集合。
使用树或数组表示。通常包括合并和查找操作。(通常选出一个代表做根)
合并时,为了防止退化树的出现,通常使用加权合并的方式(结点数大的做双亲)。
在这里插入图片描述

题型

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

第七章图

图的基本概念

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

图的存储结构

  • 邻接矩阵:矩阵(i,j)表示i-j的路径
  • 邻接表:顶点数组+边链表
    在这里插入图片描述
  • 关联矩阵:定点数*边数的矩阵
  • 十字链表:同时有指向入边集合和出边集合的链
  • 邻接多重表

图的遍历

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

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

图的联通性

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

强连通分量求法
在这里插入图片描述
在这里插入图片描述
深搜+逆序编号
反边+按编号从大到小深搜,每一次新开的搜索集合属于同一个强连通分量。

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

有向无环图的应用

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

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

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

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

最短路径

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

迪杰斯特拉:按路径长度递增(以连通集合出发的边)依次产生个顶点最短路径。(不断松弛未确定的点集距离)
Floyd:二维矩阵存距离,依次增加可供做桥梁的中间点集。在这里插入图片描述

第八章查找

基本概念和术语

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

  • 顺序表查找
    在这里插入图片描述

  • 二分查找(注意ASL求法)
    在这里插入图片描述

  • 静态树的查找

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

  • 分块查找
    在这里插入图片描述

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

  • 二叉排序树

  • 平衡二叉树

  • B树

  • 哈希表

第九章内部排序

基本概念和术语

  • 插入排序
  • 交换排序
  • 选择排序
  • 并归排序
  • 基数排序

算法比较
在这里插入图片描述

关键例题
在这里插入图片描述

第十章外部排序

  • 并归排序
    • 多路平衡并归
    • 置换-选择排序
    • 磁盘排序

例题
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1363619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超维空间M1无人机使用说明书——51、ROS无人机使用AR二维码识别与定位

引言:二维码识别与定位是指ROS通过创建AR标签并且对AR标签进行识别,标签可以由自己任意创建,具体方法会在文中给出,摄像头可以通过识别AR标签大小和姿态获取到标签对应的ID和位置等信息,实现识别与定位 注意&#xff…

深入分析-Spring BeanDefinition构造元信息

**## Spring BeanDefinition元信息定义方式 Bean Definition是一个包含Bean元数据的对象。它描述了如何创建Bean实例、Bean属性的值以及Bean之间的依赖关系。可以使用多种方式来定义 Bean Definition 元信息&#xff0c;包括&#xff1a; XML 配置文件&#xff1a;使用<be…

Qt/QML编程学习之心得:Linux下读写文件File(24)

在Linux嵌入式系统中,经常会使用Qt来读写一个文件,判断一个文件是否存在,具体如何实现呢? 首先,要使用linux系统中相关的头文件: #include <unistd.h> #include <stdio.h> #include <stdlib.h> 其次,判断路径是否存在, if(!dir.exists()){mkdir(…

C#,字符串匹配算法(模式搜索)Z算法的源代码与数据可视化

Z算法也是模式搜索&#xff08;Pattern Search Algorithm&#xff09;的常用算法。 本文代码的运算效果&#xff1a; 一、Z 算法 线性时间模式搜索算法的Z算法&#xff0c;在线性时间内查找文本中模式的所有出现。 假设文本长度为 n&#xff0c;模式长度为 m&#xff0c;那么…

SSR 服务器端渲染:提升用户体验的新趋势(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

关于目标检测中按照比例将数据集随机划分成训练集和测试集

1. 前言 在做目标检测任务的时候&#xff0c;不少网上的数据&#xff0c;没有划分数据集&#xff0c;只是将数据和标签放在不同的文件夹下&#xff0c;没有划分数据集 虽然代码简单&#xff0c;每次重新编写还是颇为麻烦&#xff0c;这里记录一下 如下&#xff0c;有的数据集…

three.js给模型添加标签三种方式对比(矩形平面,精灵图,CSS2DObject)

three.js给模型添加标签三种方式对比&#xff08;矩形平面&#xff0c;精灵图&#xff0c;CSS2DObject&#xff09; vue3实现&#xff0c;代码如下 代码 <template><div class"app"><div ref"canvesRef" class"canvas-wrap"&g…

Android studio 无法创建AIDL文件

Android studio 创建AIDL文件的时候 提示是灰色的无法创建 处理方法在app下面的build.gradle中的buildFeatures 添加 aidl true 这个是 kotlin的写法&#xff0c;如果是使用的旧项目修改下格式就行

The Planets: Mercury

靶场环境 整个靶场的环境&#xff0c;我出现了一点点问题&#xff0c;一直找不到主机的IP地址&#xff0c;后来参考了https://www.cnblogs.com/hyphon/p/16354436.html&#xff0c;进行了相关的配置&#xff0c;最后完成靶机环境的搭建&#xff01; 信息收集 # nmap -sn 192…

第二百四十三回 再分享一个Json工具

文章目录 1. 概念介绍2. 分析与比较2.1 分析问题2.2 比较差异 3. 使用方法4. 内容总结 我们在上一章回中介绍了"分享三个使用TextField的细节"相关的内容&#xff0c;本章回中将再 分享一个Json插件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我…

吉他打谱软件Guitar Pro8苹果Mac电脑简体中文特别版

Guitar Pro 8 Mac是一款吉他编曲学习软件&#xff0c;用于吉他、贝和其他弦乐器的制谱和演奏&#xff0c;这是一个多轨编辑器&#xff0c;具有集成的 MIDI 编辑器、合唱绘图仪、吉他、节拍器和其他音乐家工具。它使您能够编辑吉他、贝司和尤克里里、乐谱、指法谱&#xff0c;并…

qt三大控件

1.QListWidget控件 先在ui界面将 QListWidget拖出来竖直对齐 再去代码中实现文本插入 两种插入方式 方法1 //listWidget使用 有左右中间对齐需求QListWidgetItem * itemnew QListWidgetItem("床前明月光"); // //上面只是独立的一句话,没有关联起来ui-&g…

如何建立标准且有效的评审流程?6个重点

为了进一步提高项目质量&#xff0c;项目评审管理需要遵循一定的标准化流程。而建立标准且有效的评审流程&#xff0c;能够快速提高项目质量和效率&#xff0c;优化团队协作&#xff0c;降低风险&#xff0c;提高项目成功率。如果组织没有建立起标准化的评审流程&#xff0c;就…

C++笔记之cout高亮输出以及纯C++实现一个彩色时钟

C笔记之cout高亮输出以及纯C实现一个彩色时钟 code review! 文章目录 C\笔记之cout高亮输出以及纯C\实现一个彩色时钟一.cout高亮输出1.1.运行1.2.代码一1.3.代码二1.4.重置终端的文本格式到默认设置说明 二.纯C\实现一个彩色时钟2.1.运行2.2.main.cc2.3.cout带颜色打印输出技…

常用Python自动化测试框架有哪些?

随着技术的进步和自动化技术的出现&#xff0c;市面上出现了一些自动化测试框架。只需要进行一些适用性和效率参数的调整&#xff0c;这些自动化测试框架就能够开箱即用&#xff0c;大大节省了测试时间。而且由于这些框架被广泛使用&#xff0c;他们具有很好的健壮性&#xff0…

蓝桥杯练习题(一)

&#x1f4d1;前言 本文主要是【算法】——蓝桥杯练习题&#xff08;一&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

ts axios 指定返回值类型,返回数据类型不确定该怎么办 typescript

ts axios 指定返回值类型&#xff0c;返回数据类型不确定该怎么办 typescript 转到 ts 以来&#xff0c;一直有个问题困扰着我&#xff0c;就是每次用 axios 获取数据时&#xff0c;返回值 res 的类型都不能确定&#xff0c;这就导致编辑器一直提示我&#xff1a; 原因 原因是…

哪些软件可以把扫描的表格转成EXCEL

也可点击“软件下载” 一、点击“软件下载”下载安装软件后使用&#xff0c;或直接用网页版添加图片再点击“提交识别”来转换。 二、软件安装成功后将待识别的图片添加进去&#xff0c;点击“识别全部”即可&#xff0c;非常简单。

基于SpringBoot大药房管理系统(程序+数据库+文档)

&#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;摘 要 伴随着全球信息化发展&…

K8S-服务访问

1 Ingress简介 原理解析 Ingress是授权入站连接到达集群服务的规则集合。从外部流量调度到nodeport上的service从service调度到ingress-controlleringress-controller根据ingress[Pod]中的定义&#xff08;虚拟主机或者后端的url&#xff09;根据虚拟主机名直接调度到后端的一…