数据结构期末复习笔记

news2024/11/15 21:21:47

文章目录

  • 数据结构期末复习
  • 第一章:数据结构绪论
  • 第二章:顺序表与单链表
  • 第三章:其它链表
  • 第四章:栈
    • 如何中缀转后缀
    • 后缀如何计算
  • 第五章:队列
  • 第六章:串
  • 第七章:树的概念和遍历
  • 第八章:赫夫曼树编码
  • 第九章:图
  • 第十章:查找与排序

数据结构期末复习

第一章:数据结构绪论

  • 时间复杂度是衡量算法好坏的一个最重要的标准
  • 数据结构是为了在解决问题时让处理过程实现空间与时间上的最优

第二章:顺序表与单链表

  • 线性表: n个数据元素的有限序列
  • 线性表顺序表示: 用一组地址连续的存储单元依次存储线性表的数据元素
    • 随机存取
    • 增删时需要移动大量元素
  • 线性表链式表示:存储单元并不连续,通过指针等手段来表示数据之间的邻接关系
    • 不可随机存取
    • 增删时只需要修改前后节点

第三章:其它链表

  • 双向链表:使用 prior 和 next 指针表示邻接关系(我平时一般用的 prev)
  • 链表的优缺点:
    • 缺点:无法进行随机存取
    • 优点:相较于顺序表,能够更快得进行增删操作

第四章:栈

  • 栈:先进后出

    • 只在 top 端进行数据进栈与出栈的操作
  • 栈的应用:

    • 表达式的计算:先将中缀转后缀,再使用后缀进行计算
    • 递归算法

如何中缀转后缀

  • 中缀转后缀的核心要点是
    • 遇到数字直接写入后缀表达式
    • 遇到左括号直接入栈(左括号的优先级 = 空栈)
    • 遇到操作符
      • 如果栈为空直接入栈
      • 该操作符的优先级大于栈顶操作符就入栈,如果小于等于就让栈顶出栈,并写入后缀表达式,直到可以入栈为止
    • 如果遇到右括号就直接让栈顶出栈,写入后缀表达式,直到遇到左括号出栈结束
    • 最后结尾依次出栈即可

举个例子,中缀表达式:2 * ( 3 + 5 ) + 7 / 1 - 4 转后缀

中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2

栈:空

(数字直接写入后缀)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2

栈:*

(栈空直接入栈)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2

栈: (*

(左括号直接入栈)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2 3

栈: (*

(数字直接写入后缀)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2 3

栈: ( +*

(左括号 = 空栈,空栈直接入栈)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2 3 5

栈: ( +*

(数字直接写入后缀)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2 3 5 +

栈:*

(操作符出栈写入后缀,直到左括号)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

**后缀:2 3 5 + ***

栈:+

(操作符优先级小于等于栈顶,出栈写入;而后栈为空,操作符入栈)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2 3 5 + * 7

栈:+

(数字直接写入后缀)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2 3 5 + * 7

栈:+ /

(操作符优先级大于栈顶,直接入栈)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2 3 5 + * 7 1

栈:+ /

(数字直接写入后缀)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2 3 5 + * 7 1 / +

栈:-

(操作符优先级小于等于栈顶,出栈写入;而后栈为空,操作符入栈)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2 3 5 + * 7 1 / + 4

栈:-

(数字直接写入后缀)


中缀:2 * ( 3 + 5 ) + 7 / 1 - 4

后缀:2 3 5 + * 7 1 / + 4 -

(结尾依次出栈即可)


后缀如何计算

后缀的计算很简单,让数字不断入栈,遇到操作符就从栈中取两个数字计算,再让计算结果重新入栈,循环往复即可


第五章:队列

  • 队列:先进先出

    • 只在队尾端进行数据进队,只在队首进行数据出队
  • 队列的种类:

    • 顺序表示:使用简单但数组容易溢出
    • 链表表示:保留 front 和 rear 两个指针
    • 循环顺序表示:
      • front == rear 时为空
      • ((rear + 1) % MAXQSIZE == front 时为满
  • 队列的应用:

    • 活用先进先出特点

第六章:串

  • 串:字符串
    • 成员类型为 char 类型的线性表
  • 串的模式匹配
    • 查找子串在主串中出现的位置
    • 穷举法: O(nm)
    • KMP 算法
      • next 矩阵记录子串的跳转信息
      • 活用以匹配的信息进行查找
      • 时间复杂度: O(n+m)

KMP 算法

例题:模式串 p = “abcabx” 的 next 函数值序列为(以第一个字母序号为 “1” 计算)___

使用方法:最简单通俗易懂求 next 数组的方法 - CSDN 博客

0 a

0 ab

0 abc

1 abca

2 abcab

0 abcabx

分别计算每一层的最大前缀;在前面加一个 0,删去最后一个数,剩下的数全部 + 1 即可。

最终求的:0 1 1 1 2 3


第七章:树的概念和遍历

重要概念:

  • 结点:包含一个数据元素及若干指向其子树的分支
  • 分支:结点之间的连接
  • 结点的度:结点拥有的子树数
  • 树的度:树中结点度的最大值称为树的度
  • 叶子结点:度为 0 的结点就是没有子树的结点
  • 分支结点:度不为 0 的结点包括根结点,也称为非终端结点。除根外称为内部结点
  • 层次:根结点为第一层,其孩子为第二层,依此类推
  • 深度:树中结点的最大层次

解释一下什么是结点的度:

比如说一个节点没有孩子,他的度为 0;有一个孩子,度为 1;有两个孩子,度为 2。

树的度,看的是整棵树所有的节点,取其中度最大的节点作为树的度。


来看看二叉树的经典问题:

一棵有 124 个叶结点的完全二叉树最多有___个结点

解析:

1、根据二叉树的性质 叶子节点数 = 度为 2 的节点 + 1,因此度为 2 的结点数为 124 -1 = 123

2、而完全二叉树中度为 1 的结点数最多 1 个。

3、因此该完全二叉最多有:124+123+1 = 248 个结点。


深度为 5 的二叉树,其结点数最多为___个

2^(n-1)-1 = 31


当二叉树采用完全二叉树进行存储时(编号从 1 开始),其双亲编号为 k,则其右孩子编号为___

2k+1


第八章:赫夫曼树编码

根据使用频率,5 个字符的赫夫曼编码不可能是(C)
A. 111,110,10,01,00
B. 000,001,010,011,1
C. 100,11,10,1,0
D. 001,000,01,11,10

解析:

画图,1 往右,0 往左


设给定权值总数有 n 个(权值总数为待编码的字符数,也就是赫夫曼树的叶子结点数),其赫夫曼树的结点总数为(A)

A. 2n-1
B. 2n
C. 2n+1
D. 不能确定

解析:

现场画一棵树推导一下


image-20240102174423992

解析:

通过权值画图(这里权值截图截漏了)

(2)求其加权路径长度 WPL

解析:

将所有节点的权值*深度加在一起就是 WPL

(3)写出每个字符对应的赫夫曼编码

解析:

根据赫夫曼树向左为 0,向右为 1 求出每个字符的编码


第九章:图

以下说法中正确的是(C)
A. 连通分量是无向图中的极小连通子图
B. 有向图的遍历不可采用广度优先搜索方法
C. 连通图的生成树包含了图中所有顶点
D. 对 n 个顶点的连通图 G 来说,如果其中的某个子图有 n 个顶点和 n-1 条边,则该子图一定是 G 的生成树

解析:

A:

连通分量是图中的极大连通子图

B:

肯定可以用

D:

生成树具有连通图的全部 n 个顶点和连接它们的 n-1 条边。

如果它的一个子图有 n 个结点,也有 n-1 条边,但它们没有连接所有顶点,有的地方还出现了回路,则此子图不是生成树。


设图有 n 个顶点和 e 条边:

(1)采用邻接矩阵时,遍历图的顶点所需时间为___

(2)采用邻接表时,遍历图的顶点所需时间为___

解析:

(1)O(N^2)

(2)O(N+e)


设 G 是一个非连通无向图,有 15 条边,则该图至少有___个顶点

解析:

13


image-20240108222502855

(1)邻接矩阵,用表格表示

解析:

二维表格,谁(x)指向谁(y),就是(x,y)

(2)强连通分量,分别写出顶点的集合、连接这些顶点的所有弧的集合

解析:

强连通分量就是:A 节点能到 B 节点,B 节点也能到 A 节点

(3)从顶点 0 出发进行深度优先遍历序列

解析:

从 0 开始遍历每一个节点,visit

(4)从顶点 2 出发进行广度优先遍历序列

解析:

将没有走过的节点都入队列,走过的节点再次遇到就跳过


第十章:查找与排序

  • 查找
    • 查找简单的比较简单,难的又很难,战略放弃这部分:
    • 静态查找、二叉搜索树、二叉平衡树、B 数、哈希查找
  • 排序
    • 各种经典排序,主要了解:
    • 希尔排序、快速排序、堆排序、归并排序、基数排序

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

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

相关文章

window mysql5.7 搭建主从同步环境

window 搭建mysql5.7数据库 主从同步 主节点 配置文件my3308.cnf [mysql] # 设置mysql客户端默认字符集 default-character-setutf8mb4[mysqld] server-id8 #server-uuidbc701be9-ac71-11ee-9e35-b06ebf511956 log-binD:\mysql_5.7.19\mysql-5.7.19-winx64\mysql-bin binlog-…

【Docker项目实战】使用Docker部署nullboard任务管理工具

【Docker项目实战】使用Docker部署nullboard任务管理工具 一、nullboard介绍1.1 nullboard简介1.2 任务看板工具介绍 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍2.3 注意事项 三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本 四…

从像素到洞见:图像分类技术的全方位解读

在本文中,我们深入探讨了图像分类技术的发展历程、核心技术、实际代码实现以及通过MNIST和CIFAR-10数据集的案例实战。文章不仅提供了技术细节和实际操作的指南,还展望了图像分类技术未来的发展趋势和挑战。 一、:图像分类的历史与进展 历史回…

OCS2 入门教程(四)- 机器人示例

系列文章目录 前言 OCS2 包含多个机器人示例。我们在此简要讨论每个示例的主要特点。 System State Dim. Input Dim. Constrained Caching Double Integrator 2 1 No No Cartpole 4 1 Yes No Ballbot 10 3 No No Quadrotor 12 4 No No Mobile Manipul…

Python基础教程——用Python处理Excel!

Excel是一种常见的电子表格文件格式,广泛用于数据记录和处理。Python提供了多个第三方库,可以方便地对Excel文件进行读写、数据操作和处理。本文将介绍如何使用Python对Excel文件进行处理,并提供相应的代码示例和详细说明。 一、安装第三方库…

FreeRTOS学习——任务通知

一、什么是任务通知 FreeRTOS 从版本 V8.2.0 开始提供任务通知这个功能,每个任务都有一个 32 位的通知值。按照 FreeRTOS 官方的说法,使用消息通知比通过二进制信号量方式解除阻塞任务快 45%, 并且更加省内存(无需创建队 列&#…

linux内存浅析

内存的基本概念 操作系统内存非常重要且比较复杂,其中有许多知识点仍然需要掌握才能更进一步分析程序问题。由于是初次全面系统地接触OS内存,目的是为了全面且低层次地理解linux内存相关概念,不会深入其中原理,所以本章也会尽量避…

隐患上报二维码:扫码上报隐患,可实时跟踪整改进度

传统的隐患上报方式通常需要员工填写报告单或口头汇报,不仅消耗大量时间,还可能导致信息传递失真、无法及时跟进隐患处理进度等问题。 可以在草料上搭建隐患上报系统,员工扫码即可上报隐患线索,管理人员可实时收到消息提醒&#…

3D Web可视化开发工具包HOOPS Communicator:提供Web端浏览大型模型新方案!

前言:HOOPS Communicator是Tech Soft 3D旗下的主流产品之一,具有强大的、专用的高性能图形内核,专注于基于Web的高级3D工程应用程序。其由HOOPS Server和HOOPS Web Viewer两大部分组成,提供了HOOPS Convertrer、Data Authoring的模…

备战2024美赛数学建模,文末获取历史优秀论文

总说(历年美赛优秀论文可获取) 数模的题型千变万化,我今天想讲的主要是一些「画图」、「建模」、「写作」和「论文结构」的思路,这些往往是美赛阅卷官最看重的点,突破了这些点,才能真正让你的美赛论文更上…

PACS医学影像报告管理系统源码带CT三维后处理技术

PACS从各种医学影像检查设备中获取、存储、处理影像数据,传输到体检信息系统中,生成图文并茂的体检报告,满足体检中心高水准、高效率影像处理的需要。 自主知识产权:拥有完整知识产权,能够同其他模块无缝对接 国际标准…

基于python热门旅游景点推荐系统+爬虫技术

大数据分析,数据可视化等皆可用。 源码分享。

领域驱动模型之各层实体严格分层处理

为什么要分层处理呢? 在领域驱动模型中,分为应用层(application)、领域层(domain)、基础设施层(infrastructure)。各层只能处理和访问自己所属层的 entity 或者 dto 对象&#xff0…

人工智能在库存管理中的应用

人工智能在库存管理中的应用 目录 人工智能在库存管理中的应用一、什么是库存管理?二、如何利用AI进行智能库存管理?简化整个库存管理流程在仓库中使用基于人工智能的机器人库存管理及配送数据挖掘与处理提供个性化的客户体验 三、利用人工智能改善库存管…

UML期末复习(带习题,选择题,判断题)(持续更新)

UML期末复习 UML简介UML模型图的构成UML事物UML包含4种事物:构件事物: UML模型的静态部分,描述概念或物理元素行为事物:UML模型图的动态部分,描述跨越空间和时间的行为分组事物: UML模型图的组织部分&#…

1 快速前端开发

1 前端开发 目的:开发一个平台(网站)- 前端开发:HTML、CSS、JavaScript- Web框架:接收请求并处理- MySQL数据库:存储数据地方快速上手:基于Flask Web框架让你快速搭建一个网站出来。1.快速开发…

您的计算机已被.LIVE勒索病毒感染?恢复您的数据的方法在这里!

引言: 在数字时代,.LIVE勒索病毒如暗夜中的黑暗调,威胁着个人和企业的数字安全。本文将深入介绍.LIVE勒索病毒的特征,提供解密数据的方法,并讨论预防措施,让我们共同筑起数字世界的防护之墙。数据的重要性…

12.1SPI驱动框架

SPI硬件基础 总线拓扑结构 引脚含义 DO(MOSI):Master Output, Slave Input, SPI主控用来发出数据,SPI从设备用来接收数据 DI(MISO) :Master Input, Slave Output, SPI主控用来发出数据,SPI从设备用来接收…

【设计模式】创建型模式之单例模式(Golang实现)

定义 一个类只允许创建一个对象或实例,而且自行实例化并向整个系统提供该实例,这个类就是一个单例类,它提供全局访问的方法。这种设计模式叫单例设计模式,简称单例模式。 单例模式的要点: 某个类只能有一个实例必须…

家用洗地机怎么选?家用洗地机排名

现代很多年轻人常常为家庭卫生问题而感到头痛。一整天的工作之后,回到家中还得花费大量时间来处理地面的清理工作,包括吸尘和拖地等繁琐的任务。这些任务让人感到相当烦躁,尤其是对于有小孩的家庭来说,地板上的油污和食物残渣经常…