考研408--数据结构--day5--栈与队列的应用

考研408--数据结构--day5--栈与队列的应用
在这里插入图片描述


(以下内容全部来自上述课程)

目录

1. 括号匹配问题

1.1 概述

当我们打代码的时候,如果我们一不小心落下一个右括号,编译器就会报错提示我们。
接下来我们就要具体了解,为什么编译器可以看出来我们少了一个括号。

在这里插入图片描述


最后出现的左括号最先被匹配走(最里层被外层包起来了)
这就符合后进先出的性质,也就是栈的性质,就可以用栈来帮我们解决这个问题。

在这里插入图片描述

1.2 算法演示

遵循规则:

  • 左括号–>入栈

左括号单身–>缺少一个右括号

在这里插入图片描述


将上述的逻辑进行整合,就可以形成如下的流程图:

在这里插入图片描述

右括号单身–>缺少一个左括号

在这里插入图片描述

左右括号不匹配

在这里插入图片描述

右括号–>左括号出栈进行匹配

在这里插入图片描述

1.3 算法实现

在这里插入图片描述

1.4 小结

在这里插入图片描述

2. 表达式求值问题

在这里插入图片描述

2.1 引言

  • 操作数:阿拉伯数字,1,2,3…
  • 运算符:+、-、*、/…

界限符:就是括号

正常就是上面的表达式,但是有一个数学家就突发奇想:可不可以不用括号表示这些算式呢
所以就出现了前缀表达式和后缀表达式
因为是波兰数学家想出来的,所以还叫波兰表达式和逆波兰表达式

在这里插入图片描述

2.2 简述

  • 中缀:运算符在两个操作数中间
  • 后缀:运算符在两个操作数后面

前缀:运算符在两个操作数前面

在这里插入图片描述

2.3 中转后(手算)

观察点:第一排表达式的运算符顺序与第二排表达式的运算符顺序不一样

在这里插入图片描述
  • 运算顺序不唯一,因此对应的后缀表达式也不唯一
  • 那么我们如果想让两排表达式的运算符顺序一样该怎么做呢?

这就出现了我们需要学习的左优先原则(见左侧图片效果)!

在这里插入图片描述


使用左优先原则,就可以保证运算顺序唯一。

在这里插入图片描述

2.4 后缀表达式的计算

2.4.1 手算

操作数操作数运算符 = 一个式子 = 下一次计算的操作数
如上,一直套娃就可以得到最终结果。

在这里插入图片描述


最后出现的操作数才能和最先出现的操作数经过运算符的匹配进行计算,所以也属于一种后进先出,可以用栈来实现。

在这里插入图片描述
2.4.2 机算
表达式:AB+CD*E/-F+ 步骤 栈内容(从底到顶) 1.A[A]2.B[A,B]3.+[A+B]4.C[A+B,C]5.D[A+B,C,D]6.*[A+B,C*D]7.E[A+B,C*D,E]8./[A+B,(C*D)/E]9.-[(A+B)-((C*D)/E)]10.F[(A+B)-((C*D)/E),F]11.+[((A+B)-((C*D)/E))+F]
在这里插入图片描述


换成具体的例子:

在这里插入图片描述

2.5 中转前(手算)

之前提到后缀表达式是左优先原则
转为前缀表达式就完全反过来了,就是右优先原则。

在这里插入图片描述


在这里插入图片描述

2.6 前缀表达式的计算

和后缀表达式的计算除了反过来,剩余完全相同。

步骤元素栈(从底到顶)说明
11[1]入栈
21[1,1]入栈
3+[2]1+1=2
42[2,2]入栈
5+[4]2+2=4
63[4,3]入栈
71[4,3,1]入栈
81[4,3,1,1]入栈
9+[4,3,2]1+1=2
107[4,3,2,7]入栈
11-[4,3,5]7-2=5
1215[4,3,5,15]入栈
13÷[4,3,3]15÷5=3
14×[4,9]3×3=9
15-[5]9-4=5
在这里插入图片描述

2.7 小结

在这里插入图片描述

3. 表达式求值问题(第二季)

在这里插入图片描述

3.1 中转后(手算)

在这里插入图片描述

3.2 中转后(机算)

正常没有括号的形式:

在这里插入图片描述


加了括号之后的形式:

步骤字符栈内容(从底到顶)后缀表达式
1A[]A
2+[+]A
3B[+]AB
4*[+, *]AB
5([+, *, (]AB
6C[+, *, (]ABC
7-[+, *, (, -]ABC
8D[+, *, (, -]ABCD
9)[+, *]ABCD - *
10-[-]ABCD - * +
11E[-]ABCD - * + E
12/[-, /]ABCD - * + E
13F[-, /]ABCD - * + E F
14(结束)[-, /]ABCD - * + E F / -
在这里插入图片描述


换成具体的例子:

在这里插入图片描述

3.3 小结

在这里插入图片描述

4. 栈在递归中的应用

4.1 函数调用背后的过程

A调用B–>B调用C–>C结束–>B继续执行–>B结束–>A继续执行–>A结束
由此可见,最后调用的函数最先结束,符合后进先出的特性,所以可以用栈来实现。

在这里插入图片描述


在IDE中,我们可以通过打不同的断点来观察每个阶段,栈中的情况怎么样。

在这里插入图片描述

4.2 递归

递归就是自己调用自己。

在这里插入图片描述
4.2.1 阶乘

栈底–>栈顶:n=10–>n=1

在这里插入图片描述


栈顶–>栈底:987654321

在这里插入图片描述


在这里插入图片描述


IDE可以查看栈中元素

在这里插入图片描述
4.2.2 斐波那契数列
在这里插入图片描述


在这里插入图片描述

4.3 小结

在这里插入图片描述

队列

具体应用会在后续详细学习。

1. 树的层次遍历

先进先出:

  • 先访问根节点(第1层)
  • 再访问它的两个子节点(第2层)
  • 然后访问第2层所有节点的子节点(第3层)

依此类推

在这里插入图片描述

2. 图的广度优先遍历

先进先出:

  • 先访问起点(1)
  • 再访问它的所有邻居(2,3)
  • 然后访问第1层所有节点的邻居(2–>4,3–>5,6)

依此类推

在这里插入图片描述

3. 在操作系统中的应用

在这里插入图片描述


在这里插入图片描述

矩阵的压缩存储

涉及线性代数。

在这里插入图片描述

1. 数组的存储结构

1.1 一维数组的存储结构

在这里插入图片描述

1.2 二维数组的存储结构

分为行优先列优先

在这里插入图片描述



在这里插入图片描述

2. 矩阵的存储结构

2.1 普通矩阵

在这里插入图片描述

2.2 对称矩阵

对称:上下两个三角区的数据是重复的,所以就可以节约一个三角区的空间。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

2.3 三角矩阵

三角:上三角区或下三角区都是同一个元素,所以也可以省略出一个三角区的空间。

在这里插入图片描述


在这里插入图片描述

2.4 带状矩阵

带状:除了带状的部分,其余位置都是0,所以也可以省略出很多空间。

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

2.5 稀疏矩阵

稀疏:只有少部分位置有有效数据,所以可以按位置排出来,其余空间就可以被节约下来了。

在这里插入图片描述


在这里插入图片描述

2.6 小结

在这里插入图片描述


在这里插入图片描述

Read more

超越Git:迈向数据驱动的机器学习模型版本管理

好的,遵照您的要求,基于随机种子 1770681600067 所启发的思考方向,我将为您撰写一篇关于“模型版本管理”的深度技术文章。本文将从数据驱动的视角切入,探讨超越传统代码版本控制的模型管理范式。 超越Git:迈向数据驱动的机器学习模型版本管理 随机种子:1770681600067 在机器学习项目的生命周期中,最常被提及的挑战之一便是“重现性”。我们常常遇到这样的场景:同事六个月前训练的模型效果卓越,但如今用“最新代码”和“看起来一样的数据”却无法复现其性能。传统的代码版本控制系统(如Git)是软件工程的基石,但它本质上是一个文本文件(代码)版本管理系统。当面对机器学习项目中的模型二进制文件、大规模数据集、超参数配置、实验环境等多维实体时,Git便显得力不从心。 本文旨在深入探讨模型版本管理的核心矛盾,并提出一种以数据版本为核心、实验跟踪为脉络、模型注册为出口的复合型管理哲学与实践方案。我们将超越model_v1.pkl、model_final.pkl这种简单的命名约定,构建一个可追溯、可重现、可协作的模型管理体系。 一、模型版本管理的复杂性:

By Ne0inhk
GitHub 7大爆款Skills开源项目:Anthropic官方Skill Creator元技能+Superpowers 27k星任务拆解+Code Review自动代码审查

GitHub 7大爆款Skills开源项目:Anthropic官方Skill Creator元技能+Superpowers 27k星任务拆解+Code Review自动代码审查

Claude Agent Skills工具箱|GitHub 7大开源项目:Anthropic Skill Creator+Superpowers+Code Review+Context Engineering,AI元技能开发与上下文优化指南 技术背景:为什么Claude Skills是2025年AI Agent开发的必选项 随着Anthropic Claude在大模型领域的持续领跑,其Skills(技能)生态已成为AI Agent工程化落地的关键基础设施。与传统Prompt工程不同,Skills通过结构化的SKILL.md文件,将AI能力封装为可复用、可共享、可迭代的模块化组件,实现从"对话式交互"到"任务式执行"的范式转变。 当前,GitHub开源社区已涌现大量高质量的Claude Skills项目,涵盖元技能开发、代码审查自动化、上下文工程优化等核心场景。本文系统梳理7大高星开源项目,附完整技术解析与安全实践指南。 文章目录 * Claude Agent

By Ne0inhk
DeepSeek V4正式发布!与Gemini 3.1 Pro深度评测:中国开源力量与美国闭源巅峰的正面交锋

DeepSeek V4正式发布!与Gemini 3.1 Pro深度评测:中国开源力量与美国闭源巅峰的正面交锋

2026年3月第一周,中国AI圈期待已久的DeepSeek V4正式发布,与此前两周谷歌推出的Gemini 3.1 Pro形成正面交锋。这不仅是两款旗舰模型的同期竞技,更是中国开源力量与美国闭源巅峰的技术路线对决:DeepSeek V4以“原生多模态+国产芯片深度适配+极致成本控制”杀入战场,而Gemini 3.1 Pro则以“ARC-AGI-2 77.1%推理断层领先+三层思考模式+幻觉抗性跃升”巩固护城河。本文从基准测试、核心架构、多模态能力、成本策略四大维度进行深度技术拆解,为开发者和AI爱好者提供硬核参考。 国内用户可通过聚合镜像平台RskAi(ai.rsk.cn)直接体验Gemini 3.1 Pro,同时等待DeepSeek V4的镜像接入,形成双模型布局——一个应对深度复杂推理,一个满足高性价比国产需求。 一、发布动态:时间线与战略意图 关键信号:DeepSeek V4打破了AI行业长期惯例—

By Ne0inhk
【Git原理与使用】多人协作

【Git原理与使用】多人协作

多人协作 * 1.多人协作一 * 1.1准备工作 * 1.2协作开发 * 1.3将内容合并进master * 2.多人协作二 * 2.1协作开发 * 2.3将内容合并进master * 3.远程分支删除后,本地 git branch -a 依然能看到的解决办法 1.多人协作一 1.1准备工作 到目前为止对于Git提供给我们的大部分实用操作已经学的差不多了 * 基本完成 Git 的所有本地库的相关操作,git基本操作,分支理解,版本回退,冲突解决等等 * 申请码云账号,将远端信息clone到本地,以及推送和拉取 是时候干最重要的一件事情了,实现多人协作开发! * 目标:远端master分支下file.txt文件新增代码 “aaa”、“bbb” * 实现:由开发者1新增 “aaa”,由开发者2新增 “bbb” * 条件:

By Ne0inhk