自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(328)
  • 收藏
  • 关注

原创 Linux(五)创建一个miniShell

实现一个minishell

2023-01-24 16:25:24 1460

原创 LInux(四)进程控制(创建、终止、等待、替换)

进程控制分为进程创建(写时拷贝技术、fork、vfork创建子进程流程)、进程终止(程序的三种退出方式,exit与_exit的区别、退出码反映程序的退出情况)、进程等待(使用wait与waitpid接口参数使用与掌握、理解Status底层结构)、进程替换(以execve系统调用接口封装起来的其余接口的理解与使用)

2023-01-24 13:28:35 3094

原创 数据结构 最短路径课设(源码+实验报告+视频讲解)(用了自取)

关于数据结构最短路径问题实验报告+代码+视频(用了自取)

2023-01-23 20:18:50 2991

原创 LInux(三)程序地址空间、内存管理

介绍程序地址空间、操作系统中三种内存管理方式(分页式内存管理、分段式内存管理、段页式内存管理)、缺页中断与内存置换算法

2023-01-19 19:47:18 1744

原创 Linux(二)进程概念

介绍冯诺依曼体系结构、操作系统控制管理计算机上的软硬件资源、进程相关信息以及fork接口的详细介绍与使用、简单模拟父子进程、僵尸进程、孤儿进程。以及对于环境变量也展开了具体的描述,对于三种获取环境变量的方式进行模拟实现

2023-01-19 00:08:54 1299

原创 课设 银行家算法 源码+实验报告(用了自取)

银行家算法400行代码,用自取,逻辑清晰、思路完整、代码布局合理,复制粘贴即可使用

2023-01-02 10:49:15 7153 2

原创 dfs(二十六)77. 组合

【代码】dfs(二十六)77. 组合。

2025-03-22 15:23:45 169

原创 dfs(二十五)22. 括号生成

代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且。使用左右俩个全局变量也可以传参数作为括号是否合法的匹配标准。

2025-03-22 12:28:04 315

原创 dfs(二十四)47. 全排列 II

使用二维数组保存所有的全排列次序,并使用set容器来去重。给定一个可包含重复数字的序列。返回所有不重复的全排列。

2025-03-20 23:36:27 250

原创 dfs(二十三)1863. 找出所有子集的异或总和再求和

[5,1,6] 的异或总和为 5 XOR 1 XOR 6 = 2。- [1,3] 的异或总和为 1 XOR 3 = 2。- [5,1] 的异或总和为 5 XOR 1 = 4。- [5,6] 的异或总和为 5 XOR 6 = 3。- [1,6] 的异或总和为 1 XOR 6 = 7。每个子集的全部异或总和值之和为 480。- [1] 的异或总和为 1。- [3] 的异或总和为 3。- [5] 的异或总和为 5。- [1] 的异或总和为 1。- [6] 的异或总和为 6。

2025-03-20 22:46:57 496

原创 dfs(二十二)78. 子集

传一个下标作为参数,这样在函数进行递归的时候就可以进行去重操作。返回该数组所有可能的。

2025-03-20 22:10:16 585

原创 dfs(二十一)46. 全排列 中等

给定一个不含重复数字的数组。

2025-03-20 16:32:50 278

原创 dfs(二十)257. 二叉树的所有路径

因为在dfs操作的时候使用的是全局变量temp来记录每次的路径元素,使用vector可以很容易的进行push pop 操作,其实使用string temp也可以,不过会比较麻烦。访问到叶子结点时,说明path中存放了一条合理的路径,我们直接将其放入res结果即可,在函数返回的时候path中之前新插入的元素随着栈帧的返回自行进行pop,省略了我们需要进行pop这一步骤。使用dfs先将每条路径存储在一个vector中,最后再从vector转入string中。,返回所有从根节点到叶子节点的路径。

2025-03-20 15:47:25 341

原创 dfs(十九)230. 二叉搜索树中第 K 小的元素

使用一个全局变量count来进行计数,中序遍历访问到第k个就进行更新全局变量res的结果。,请你设计一个算法查找其中第。小的元素(从 1 开始计数)。给定一个二叉搜索树的根节点。

2025-03-20 11:55:35 190

原创 dfs(十八)98. 验证二叉搜索树

给你一个二叉树的根节点root,判断其是否是一个有效的二叉搜索树。truefalse根节点的值是 5 ,但是右子节点的值是 4。[1, 104]性质解法二叉搜索树的中序遍历为一个有序序列!

2025-03-20 11:45:35 306

原创 dfs(十七)814. 二叉树剪枝 中等

给你二叉树的根结点root,此外树的每个结点的值要么是0,要么是1。返回移除了所有不包含1的子树的原二叉树。节点node的子树为node本身加上所有node的后代。只有红色节点满足条件“所有不包含 1 的子树”。右图为返回的答案。

2025-03-20 10:43:40 359

原创 树dfs(十六)129. 求根节点到叶节点数字之和 中等!!

本来是上面这样写的, 但遇到了有左右子树不存在的情况,导致后续left和right变量的更新失败,所以使用创建一个新变量 ret 来保存左右子树的结果 并且在向下递归的时候判断一下子树是否存在。这道题在递归函数名上需要更多的一个参数,prenum,要传入当前节点之前的大小,并且每深入一层就要给pre乘上10,向下传入pre * 10 + root->val。因此,数字总和 = 495 + 491 + 40 =计算从根节点到叶节点生成的。给你一个二叉树的根节点。是指没有子节点的节点。

2025-03-18 11:24:09 220

原创 树dfs(十五)2331. 计算布尔二叉树的值

AND 与运算节点的值为 False AND True = False。OR 运算节点的值为 True OR False = True。根节点是叶子节点,且值为 false,所以我们返回 false。根节点的值为 True ,所以我们返回 true。上图展示了计算过程。

2025-03-18 11:13:50 308

原创 dfs(十四)50. Pow(x, n)

【代码】dfs(十四)50. Pow(x, n)

2025-03-18 09:35:42 399

原创 dfs(十四)24. 两两交换链表中的节点

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。函数体:先去处理⼀下第⼆个结点往后的链表,然后再把当前的两个结点交换⼀下,连接上后⾯处。递归函数的含义:交给你⼀个链表,将这个链表两两交换⼀下,然后返回交换后的头结点;递归出⼝:当前结点为空或者当前只有⼀个结点的时候,不⽤交换,直接返回。

2025-03-18 09:06:30 287

原创 dfs(十三)206. 反转链表

先使用dfs访问到最后一个元素,然后用newhead保存新的头结点,最后使用head修改当前指针的后一个指针指向实现逆序操作。链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?,请你反转链表,并返回反转后的链表。

2025-03-17 23:24:51 340

原创 dfs(十二)21. 合并两个有序链表 递归解决

新链表是通过拼接给定的两个链表的所有节点组成的。将两个升序链表合并为一个新的。

2025-03-17 22:06:44 303

原创 dfs(十一)面试题 08.06. 汉诺塔问题

在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。(2) 盘子只能从柱子顶端滑出移到下一根柱子;(3) 盘子只能叠在比它大的盘子上。(1) 每次只能移动一个盘子;

2025-03-17 21:36:17 183

原创 拓扑排序(二)210. 课程表 II

总共有 4 门课程。要学习课程 3,你应该先完成课程 1 和课程 2。并且课程 1 和课程 2 都应该排在课程 0 之后。总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为。返回你为了学完所有课程所安排的学习顺序。可能会有多个正确的顺序,你只要返回。多了一步再每次出队列的时候给res中进行一步尾插。如果不可能完成所有课程,返回。因此,一个正确的课程顺序是。

2025-03-13 19:37:05 221

原创 拓扑排序(一)207. 课程表

总共有 2 门课程。学习课程 1 之前,你需要先完成​课程 0;并且学习课程 0 之前,你还应先完成课程 1。总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。在选修某些课程之前需要一些先修课程。请你判断是否可能完成所有课程的学习?,表示如果要学习课程。

2025-03-13 19:24:09 217

原创 多源BFS(二十一)1162. 地图分析 中等

请你找出一个海洋单元格,这个海洋单元格到离它最近的陆地单元格的距离是最大的,并返回该距离。如果网格上只有陆地或者海洋,请返回。海洋单元格 (1, 1) 和所有陆地单元格之间的距离都达到最大,最大距离为 2。海洋单元格 (2, 2) 和所有陆地单元格之间的距离都达到最大,最大距离为 4。,上面的每个 单元格 都用。这两个单元格之间的距离是。你现在手里有一份大小为。

2025-03-13 12:43:36 160

原创 多源BFS(二十)1765. 地图中的最高点 中等

将所有的水域坐标加入队列中,然后利用队列进行bfs操作扩散至周围所有陆地,并更新其高度。任意安排方案中,只要最高高度为 2 且符合上述规则的,都为可行方案。找到一种安排高度的方案,使得矩阵中的最高高度值。所有安排方案中,最高可行高度为 2。蓝色格子是水域格,绿色格子是陆地格。如果有多种解法,请返回。上图展示了给各个格子安排的高度。

2025-03-13 12:08:55 325

原创 多源BFS(十九)1020. 飞地的数量 中等

解法一使用的是俩轮for循环分别进入bfs操作,也可以使用解法二多源bfs思想,将所有边界上的结点统一先放入队列中,在进行后续操作。将边界位置上的所有陆1给它全部进行bfs操作置为0,然后进行一轮计数操作即可。有三个 1 被 0 包围。一个 1 没有被包围,因为它在边界上。在任意次数的移动中离开网格边界的陆地单元格的数量。是指从一个陆地单元格走到另一个相邻(所有 1 都在边界上或可以到达边界。表示一个海洋单元格、表示一个陆地单元格。)的陆地单元格或跨过。

2025-03-13 11:20:06 342

原创 多源 BFS_多源最短路(十八)542. 01 矩阵 中等 超级源点思想

很难从1出发去找每一个最近的0,这样就只能使用单源最短路径bfs求解,最终导致复杂度过高。所以可以将所有的0作为一个超级源点,把所有的起点加入队列,剩下的就都是1,然后利用这个队列进行bfs操作,每访问一个结点,就更新它的step步数值,并放入book标记数组里。,请输出一个大小相同的矩阵,其中每一个格子是。中对应位置元素到最近的。两个相邻元素间的距离为。

2025-03-13 10:37:34 389

原创 BFS最短路径(十七)675. 为高尔夫比赛砍树 困难

1、将给定的二维数组重新处理,使用一个Node结构体来进行存储,结构体内部有树高权值、以及树的横纵坐标。每一步,你都可以向上、下、左、右四个方向之一移动一个单位,如果你站的地方有一棵树,那么你可以决定是否要砍倒它。那么此题就转化为了俩俩坐标之间的迷宫问题,只需要求出每俩坐标之间最小的步数,最后把所有的步数加起来即可。你需要按照树的高度从低向高砍掉所有的树,每砍过一颗树,该单元格的值变为。可以保证的是,没有两棵树的高度是相同的,并且你至少需要砍倒一棵树。(0,0) 位置的树,可以直接砍去,不用算步数。

2025-03-12 20:30:04 1049

原创 BFS最短路径(十六)127. 单词接龙 困难

字符串n位,每位有26种变化情况,俩个for循环嵌套,一位一位的进行修改,对修改之后的字符串,判断是否之前访问过(访问过的扔book标记里面),没访问过并且在基因库中的放入队列,并判断是否为目标字符串。一个最短转换序列是 "hit" -> "hot" -> "dot" -> "dog" -> "cog", 返回它的长度 5。endWord "cog" 不在字典中,所以无法进行转换。如果不存在这样的转换序列,返回。是一个按下述规格形成的序列。

2025-03-12 19:18:17 249

原创 BFS最短路径(十五)433. 最小基因变化

字符串八位,每位有四种变化情况,俩个for循环嵌套,一位一位的进行修改,对修改之后的字符串,判断是否之前访问过(访问过的扔book标记里面),没访问过并且在基因库中的放入队列,并判断是否为目标字符串。记录了所有有效的基因变化,只有基因库中的基因才是有效的基因序列。(变化后的基因必须位于基因库。一次基因变化就意味着这个基因序列中的一个字符发生了变化。基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是。如果无法完成此基因变化,返回。默认是有效的,但是它并不一定会出现在基因库中。

2025-03-12 11:38:42 253

原创 BFS最短路径(十四) 1926. 迷宫中离入口最近的出口

1、在元素入队列的时候进行判断和处理,最开始的入口坐标不作判断,只有对后续进行移动后的坐标进行判断处理。2、每层将所有一步能访问到的节点尽可能全部放入队列中,到最后第一次访问到边界条件时,进行结果的返回。总共有 3 个出口,分别位于 (1,0),(0,2) 和 (2,3)。所以,最近的出口是 (0,2) ,距离为 1 步。所以,最近的出口为 (1,2) ,距离为 2 步。迷宫中只有 1 个出口,在 (1,2) 处。初始时,你在入口与格子 (1,0) 处。一开始,你在入口格子 (1,2) 处。

2025-03-12 10:44:00 227

原创 BFS(十三)463. 岛屿的周长

在bfs函数内每次从队列中取出一个元素时,访问这个坐标的上下左右四个方向,是不是边界或者水域,如果是就res++,因为我们每次放入队列的元素都是合理的位置元素,所以这里直接在出队列的时候进行判断操作。这种访问岛屿的问题还是要记得引入book标记数组来进行处理。岛屿中没有“湖”(“湖” 指水域在岛屿内部且不和岛屿周围的水相连)。计算这个岛屿的周长。整个网格被水完全包围,但其中恰好有一个岛屿(或者说,一个或多个表示陆地的格子相连组成的岛屿)。它的周长是上面图片中的 16 个黄色的边。

2025-03-11 15:42:58 372

原创 BFS(十二)130. 被围绕的区域

跟之前的岛屿问题不同,如果直接从原来的方法入手,会导致bfs遇到边缘情况时无法回退,因为之前已经修改为X了,如果要继续这样做的话,需要进行俩遍bfs操作,第一步访问这片区域,保证这个区域都在被包围的范围之内。第二次在进行一遍bfs进行修改。正难则反:从四周的边缘位置出发,将所有处于边缘位置的O全部修改为另外一个字符 ' . ' ,最后在进行一次二维扫描,将不是 点 的“O”全部修改为“X”,将之前的 点 还原为 “O”。在上图中,底部的区域没有被捕获,因为它在 board 的边缘并且不能被围绕。

2025-03-11 14:53:44 411

原创 BFS(十一)695. 岛屿的最大面积

在每次进入bfs函数中加入一个count进行岛屿个数的计算,每次排查完一处岛屿,更新一下res_max变量。(代表土地) 构成的组合,这里的「相邻」要求两个。如果没有岛屿,则返回面积为。,因为岛屿只能包含水平或垂直这四个方向上的。岛屿的面积是岛上值为。

2025-03-10 23:02:29 257

原创 BFS(十)岛屿数量 中等

3、auto &[a, b] 与 auto [a, b] 加入& 后会导致在进行后续pop操作时对队列成员的修改。2、在bfs的时候,对一个新坐标进行界限访问后还要验证book数组与grid 看接下来是不是陆地,并且该陆地是否被访问过。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。1、使用表示数组book来记录当前位置是否被访问过。(水)组成的的二维网格,请你计算网格中岛屿的数量。此外,你可以假设该网格的四条边均被水包围。

2025-03-10 22:30:37 418

原创 BFS(九)733. 图像渲染

使用层序遍历bfs思想,每次访问一个位置时,再将符合条件的上下左右四个位置的坐标放入队列中,(即红色像素),在路径上所有符合条件的像素点的颜色都被更改成相同的新颜色(即蓝色像素)。初始像素已经用 0 着色,这与目标颜色相同。因此,不会对图像进行任何更改。更改为2,因为它不是在上下左右四个方向上与初始点相连的像素点。表示该图画的像素值大小。的二维整数数组表示的图画。最后返回经过上色渲染。在图像的正中间,坐标。

2025-03-10 20:45:08 235

原创 priority_queue(七)295. 数据流的中位数

/ 返回 1.5 ((1 + 2) / 2)是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。返回到目前为止所有元素的中位数。以内的答案将被接受。

2025-03-08 17:32:35 123

原创 priority_queue(六)692. 前K个高频单词 中等

"the", "is", "sunny" 和 "day" 是出现次数最多的四个单词,返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,"i" 和 "love" 为出现次数最多的两个单词,均为2次。注意,按字母顺序 "i" 在 "love" 之前。出现次数依次为 4, 3, 2 和 1 次。我们需要提取频次最高的前K个元素,那么就选择维护一个。个出现次数最多的单词。

2025-03-08 17:10:52 176

Linux多线程-相关手写笔记

线程概念、线程控制、线程安全

2023-02-06

操作系统-银行家算法-银行家算法是操作系统的经典算法之一

银行家算法是操作系统的经典算法之一,用于避免死锁情况的出现。 它最初是为银行设计的(因此得名),通过判断借贷是否安全,然后决定借不借。 在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。 用在操作系统中,银行家、出借资金、客户,就分别对应操作系统、资源、申请资源的进程。 每一个新进程进入系统时,必须声明需要每种资源的最大数目,其数目不能超过系统所拥有的的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程,若有,再进一步计算在将这些资源分配给进程后,是否会使系统处于不安全状态如果不会才将资源分配给它,否则让进程等待。 (1)互斥条件:并发进程所要求和占有的资源是不能同时被两个以上进程使用或操作的,进程对他所需要的资源进行排他性控制。 (2)不剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行剥夺,而且只能由获得该资源的进程自己释放。 (3)请求和保持条件:进程已经至少保持了一个资源,但又提

2023-01-26

《二叉树及应用》 数据结构中二叉树使用

[问题描述]建立一个二叉树,并对其进行4种遍历(前中后层)。 [要求] 使用递归和非递归,计算二叉树中节点的个数,树的深度等。 [目的] 通过对二叉树的应用,熟练运用递归,栈和队列。 [实现提示] 二叉树中节点的结构如下: class BNode { char m_value; //二叉树中节点的值 BNode* m_left; //指向左子树指针 BNode* m_right;//指向右子树指针 }; 1、课程设计目的和内容 主要包括:需求分析,模块功能要求,分析理解问题,明确问题; 2、算法的基本思想 主要包括:概要设计,详细设计,数据结构定义,流程图 以及各个模块之间的关系; 3、测试数据 列出对于给定的输入所产生的输出; 4、源程序及文档说明 程序最终源码\程序最终设计文档 5、心得体会 课程设计的收获,遇到问题的思考过程,程序的调试能力,以及对于数据结构这门课程的思考 6、参考文献 二叉树先序中序后续遍历递归与非递归的实现、掌握栈和队列的用法。了解结构体内部嵌套之间的关系 二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构

2023-01-26

数据结构课程设计-最短路径

最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。 算法具体的形式包括: 确定起点的最短路径问题 - 即已知起始结点,求最短路径的问题。 确定终点的最短路径问题 - 与确定起点的问题相反,该问题是已知终结结点,求最短路径的问题。在无向图中该问题与确定起点的问题完全等同,在有向图中该问题等同于把所有路径方向反转的确定起点的问题。 确定起点终点的最短路径问题 - 即已知起点和终点,求两结点之间的最短路径。 全局最短路径问题 - 求图中所有的最短路径。 1、用邻接矩阵存储一张带权有向图。 2、对图进行从某一源点到其他各顶点的最短路径 3、输出最后结果(路径名称、路径长度)。 邻接矩阵建立包括:用二维数组存储信息。没有直达路径的为无穷。 用循环来判断最小值。 最终结果用一维数组存储。D[]存放源点到其他顶点的最短路径的长度,P[]存放该顶点最短路径的前驱顶点下标,visit[]为访问标识。初始全部值设为F,先把源点的标识设为T,后面每找到一个源点到其余顶点的最短路径,就将该顶点下标对应的标识置为T。直到全部顶点执行完毕。 输出一维数组D[

2023-01-26

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除