数据结构期末复习笔记

文章目录

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

数据结构期末复习

第一章:数据结构绪论

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

第二章:顺序表与单链表

  • 线性表: 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.mzph.cn/news/611117.shtml

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

相关文章

muduo网络库剖析——网络地址InetAddress类

muduo网络库剖析——网络地址InetAddress类 前情从muduo到my_muduo 概要socketaddr_in介绍成员用法 网络地址转换函数 框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否可以高效满足&…

在矩池云使用微调ChatGLM3-6B教程

今天给大家介绍下如何在矩池云使用ChatGLM3-6B模型。 1 简介 GitHub:https://github.com/THUDM/ChatGLM3 魔搭:https://modelscope.cn/models/ZhipuAI/chatglm3-6b/ ChatGLM3 是智谱AI和清华大学 KEG 实验室联合发布的新一代对话预训练模型。ChatGLM3…

租房别再傻傻的扯网线了!随身WiFi靠谱品牌推荐,哪个随身WiFi最好用

如果你是租房党,并且预算有限的话,拉网线太麻烦了,价格很贵,需要搬家的时候还要重新扯线,事儿很多。想买一个网速快,便捷的随身WiFi看电影、刷刷抖音、打打游戏,那一定一定要认真看完我这篇文章…

metrics安装异常原因【doesn‘t contain any IP SANs】

1、问题背景 安装好k8s后,安装metrics-server后发现对应的pod一直无法启动。 apiVersion: v1 kind: ServiceAccount metadata:labels:k8s-app: metrics-servername: metrics-servernamespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1 kind: Cl…

Jasper report InputStream动态生产Logo

第一步,新建一个Parameter 新建一个对象Parameter,类型为java.io.InputStream 第二步,拖拽Image对象 拖拽Image对象,并调整长宽,Image下选择Expression $P{Logo_Blue} 第三步,把图片转换成stream rptHea…

numpy100练习题,包含相应使用函数解释

取自github开源项目:numpy100题 文章目录 1. 导入numpy库并简写为 np (★☆☆)2. 打印numpy的版本和配置说明 (★☆☆)3. 创建一个长度为10的空向量 (★☆☆)4. 如何找到任何一个数组的内存大小? (★☆☆)5. 如何从命令行得到numpy中add函数的说明文档?…

D41|打家劫舍

198.打家劫舍 初始思路&&题解复盘: 确定dp数组(dp table)以及下标的含义 dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]。 2.确定递推公式 决定dp[i]的因素就是第i房…

Unity 实用方法 合集

Unity 实用方法 合集 Unity 打字机效果2D 坐标旋转计算球面坐标求值平滑移动鼠标位置获取2D屏幕坐标转世界坐标物体朝向目标多物体中心点生成本地图片加载画面线框显示画面线框显示 搭载效果 贝塞尔曲线绘制贝塞尔曲线绘制 搭载效果 网格弯曲网格弯曲 搭载效果 Delaunay 模型生…

安泰ATA-4014高压功率放大器在传感器脉冲涡流检测中的应用

传感器在工程领域起着至关重要的作用,能够实时获取各种物理量的信息。而功率放大器作为传感器信号处理的重要组成部分,广泛应用于各种测量和控制系统中。本文将探讨功率放大器在这一领域的重要性和作用。 首先,了解传感器脉冲涡流检测的基本原…

二、电脑备份

一、电脑备份 解释:window10目前有电脑备份的功能,一般备份C盘(因为系统在这里),这个功能挺重要的,能够帮你在危难的时候把电脑拉回来,在按照xxxx教程安装驱动,操作注册表,修改C盘里面跟系统有…

亚信安慧AntDB团队引领数据库创新浪潮

湖南亚信安慧科技有限公司,原亚信科技AntDB团队,近日获得信创工委会颁发的创新活跃度荣誉,充分肯定了其在科技创新领域的杰出表现。在当前全球经济下行的大环境中,创新正逐渐成为国家、企业和个人发展的关键因素。亚信安慧作为一家…

AI芯片:神经网络研发加速器、神经网络压缩简化、通用芯片 CPU 加速、专用芯片 GPU 加速

AI芯片: 神经网络研发加速器、神经网络压缩简化、通用芯片 CPU 加速、专用芯片 GPU 加速 神经网络研发加速器神经网络编译器神经网络编译器 神经网络加速与压缩(算法层面)知识蒸馏低秩分解轻量化网络剪枝量化 通用芯片 CPU 加速x86 加速arm 加…

【Linux】应用与驱动交互及应用间数据交换

一、应用程序与 Linux 驱动交互主要通过以下几种方式: 1. 系统调用接口(System Calls): 应用程序可以通过系统调用,如 open(), read(), write(), ioctl(), 等来与设备驱动进行交互。这些调用最终会通过内核转发到相应的驱动函数…

安装ubuntu22.04系统,GPU驱动,cuda,cudnn,python环境,pycharm

需要准备一个u盘,需要格式化,且内存不小于8g 1 下载ubuntu镜像 下载链接: https://cn.ubuntu.com/download/desktop 2下载rufus Rufus - 轻松创建 USB 启动盘Rufus: Create bootable USB drives the easy wayhttps://rufus.ie/zh/ 准备好这…

Abp 创建一个模版demo并运行

Demo效果 :简单的单表crud后台服务。不包含UI 项目类型是模块ABP。生成的结构和 多应用/单应用 有差异。 结合文档以及git的源码分享一下demo的理解 abp文档:API/Auto API Controllers | Documentation Center | ABP.IO 前置准备: Net8 环境…

鹅目标检测数据集VOC格式300张

鹅,一种家禽,以其独特的形态、生活习性和文化象征意义而备受人们喜爱。 鹅属于鸟纲、雁形目、鸭科,是一种大型水禽。它们的身体肥胖,羽毛洁白如雪,嘴部扁平且坚硬,脚部有蹼,适合在水中游动。 …

VBA_NZ系列工具NZ11:VBA光标跟随策略

我的教程一共九套及VBA汉英手册一部,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到数据库,到字典,到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑,这么多知识点该如何组织…

【vue3中状态管理工具pinia的使用】pinia状态一(state)

1、安装 yarn add pinia//或者//npm install pinia2、在main.js中引入store // 引入piniaimport { createPinia } from piniaconst pinia createPinia()// 使用piniaapp.use(pinia)3、创建一个Store 在项目根目录的 src文件夹 —— 创建store文件夹 —— 创建 index.js 文件 …

MongoDB查找命令find,让数据返回称心如意

业务系统接入数据库后,每天都有大量的数据写入数据库。面对逐日增加的数据,开发人员或数据分析人员,该如何读取数据,怎样设置条件,从数据库中查询数据? 本文基于mongodb的官方文档,整理出find命…

​电脑技巧:​笔记本电脑电流声的原因和解决方案

目录 一、音频设备接口接触不良 二、笔记本电源问题 三、笔记本电脑驱动程序问题 四、音频硬件问题 五、操作系统内部电磁干扰 六、最后总结 大家在日常生活当中,笔记本电脑已经成为我们工作、学习和娱乐的重要工具。但有时我们在使用过程中可能会遇到一个令人…