数据结构期末复习笔记

文章目录

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

数据结构期末复习

第一章:数据结构绪论

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

第二章:顺序表与单链表

  • 线性表: 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 数、哈希查找
  • 排序
    • 各种经典排序,主要了解:
    • 希尔排序、快速排序、堆排序、归并排序、基数排序

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

创建一个郭德纲相声GPTs

前言 在这篇文章中,我将分享如何利用ChatGPT 4.0辅助论文写作的技巧,并根据网上的资料和最新的研究补充更多好用的咒语技巧。 GPT4的官方售价是每月20美元,很多人并不是天天用GPT,只是偶尔用一下。 如果调用官方的GPT4接口&…

Win10 自带微软输入法怎么切换成简体字 快捷鍵是什么?

环境: Win10专业版 问题描述: 微軟輸入法怎麽切換中文簡體 快捷鍵,之前不小心按了快捷键 解决方案: 1.按CtrlShiftF快捷键转换简体字或繁体字 2.可以在“设置-时间和语言-区域和语言-语言-中文(中华人民共和国&a…

为什么选择嬴图?

图数据库、图计算、图中台都是用图论的方式去构造实体间的关联关系,实体用顶点来表达,而实体间的关系用边来表达。图数据库的这种简洁、自由、高维但100%还原世界的数据建模的方式让实体间的关联关系的计算比SQL类的数据库高效成千上万倍。 图&#xff1…

游戏版 ChatGPT,要用 AI 角色完善生成工具实现 NPC 自由

微软与 AI 初创公司 Inworld 合作,推出基于 AI 的角色引擎和 Copilot 助理,旨在提升游戏中 NPC 的交互力和生命力,提升游戏体验。Inworld 致力于打造拥有灵魂的 NPC,通过生成式 AI 驱动 NPC 行为,使其动态响应玩家操作…

计算机基础面试题 |19.精选计算机基础面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

【复习】人工智能 第7章 专家系统与机器学习

专家系统就是让机器人当某个领域的专家,但这章专家系统不咋考,主要靠书上没有的机器学习。 一、专家系统的基本组成 二、专家系统与传统程序的比较 (1)编程思想: 传统程序 数据结构 算法 专家系统 知识 推理 &…

模型\视图一般步骤:为什么经常要用“选择模型”QItemSelectionModel?

一、“使用视图”一般的步骤: //1.创建 模型(这里是数据模型!) tabModelnew QSqlTableModel(this,DB);//数据表 //2.设置 视图的模型(这里是数据模型!) ui->tableView->setModel(tabModel); 模型种类: QStringListModel…

golang 记录一次协程和协程池的使用,利用ants协程池来处理定时器导致服务全部阻塞

前言 在实习的项目中有一个地方遇到了需要协程池的地方,在mt推荐下使用了ants库。因此在此篇记录一下自己学习使用此库的情况。 场景描述 此服务大致是一个kafka消息接收、发送相关。接收消息,根据参数设置定时器进行重发。 通过这里新建kafka服务&a…

【Spring实战】27 统一异常处理最佳实践

文章目录 1. 自定义异常2. 统一异常处理3. 配置4. 应用5. 启动类6. 启动服务7. 验证8. 优点总结 在 Spring 项目中,有效的异常处理是确保应用程序稳定性和用户体验的关键因素之一。通过实现统一异常处理,我们能够更好的管理和响应应用程序中的各种异常情…

vue elementUI Tree 树形控件的使用方法

用清晰的层级结构展示信息&#xff0c;可展开或折叠。 效果演示 trees.vue代码 <template><div><!-- 树形控件 --><el-tree :data"treesList" :props"treesProps" show-checkbox node-key"id"default-expand-all :defau…

关于TLS相关安全配置问题

近期被信安部门反馈了TLS几个安全漏洞。 SSL/TLS协议信息泄露漏洞(CVE-2016-2183)【原理扫描】SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808)【原理扫描】SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱【原理扫描】SSL/TLS RC4 信息泄露漏洞(CVE-2013-2566)【原理扫…

步进电机介绍

一、什么是步进电机&#xff1a; 步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号&#xff0c;转子就转动一个角度或前进一步&#xff0c;其输出的角位移或线位移与输入的脉冲数成正比&#xff0c;转速与脉冲频率成正比。因此&#xff0c;步…

FPGA之按键消抖

目录 1.原理 2.代码 2.1 key_filter.v 2.2 tb_key_filter.v 1.原理 按键分为自锁式按键和机械按键&#xff0c;图左边为自锁式按键 上图为RS触发器硬件消抖&#xff0c;当按键的个数比较多时常常使用软件消抖。硬件消抖会使用额外的器件占用电路板上的空间。 思路就是使用延…

c++临时对象的探讨及相关性能提升

产生临时对象的情况 我们定义一个类进行测试 class tempVal { public:int v1, v2;tempVal(int v1 0, int v2 0);tempVal(const tempVal& t) :v1(t.v1), v2(t.v2) {cout << "调用拷贝构造函数" << endl;}virtual ~tempVal() {cout << "…

第九届云计算与大数据分析国际会议(ICCCBDA 2024)即将召开!

​ 第九届云计算与大数据分析国际会议&#xff08;ICCCBDA 2024&#xff09;将于2024年4月25-27日在中国成都召开。ICCCBDA自创办以来&#xff0c;已经成功召开了八届。此次会议将介绍一些当前和未来的前沿技术趋势、创新方案、研究成果&#xff0c;以及和云计算和大数据分析相…

数据讲述中国故事!和鲸助力中国综合社会调查(CGSS)数据分析与可视化大赛圆满收官

中国综合社会调查&#xff08;Chinese General Social Survey&#xff0c;CGSS&#xff09;始于 2003 年&#xff0c;由中国人民大学中国调查与数据中心&#xff08;NSRC&#xff09;常年负责其相关实施工作&#xff0c;作为我国最早具全国性、综合性、连续性的学术社会调查项目…

http跟https有什么区别?

HTTPS和HTTP的概念&#xff1a; HTTP&#xff1a;是互联网上应用最为广泛的一种网络协议&#xff0c;是一个客户端和服务器端请求和应答的标准&#xff08;TCP&#xff09;&#xff0c;用于从WWW服务器传输超文本到本地浏览器的传输协议&#xff0c;它可以使浏览器更加高效&am…

探索前端跨组件通信:EventBus在Vue和React中的应用

本文作者系360奇舞团前端开发工程师 EventBus 简介 事件总线&#xff08;Event Bus&#xff09;是一种用于组件间通信的模式&#xff0c;通常用于解决组件之间的解耦和简化通信的问题。在前端框架中&#xff0c;如 Vue.js&#xff0c;事件总线是一个常见的概念。基本上&#xf…

【hcie-cloud】【21】容器详解【容器网络说明、容器存储说明、容器镜像说明、dockerfile详述、缩略词】【下】

文章目录 容器介绍&#xff0c;容器工作机制、容器常用命令说明容器网络容器网络简介容器常用网络类型 - Bridge容器常用网络类型 - Host容器常用网络类型 - None其他容器网络类型【Macvlan、Overlay、IPvlan】容器网络相关配置 容器存储容器中应用数据的存储容器持久化存储配置…

HTML5 article标签,<time>...</time>标签和pubdate属性的运用

1、<article>...</article>标签的运用 article标签代表文档、页面或应用程序中独立的、完整的、可以独自被外部引用的内容。它可以是一篇博客或报竟杂志中的文章、一篇论坛帖子、一段用户评论或一个独立的插件&#xff0c;或者其他任何独立的内容。把文章正文放在h…