自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 7. 栈与队列(随想录)

2025-04-21 17:23:50 56

原创 5. 进程控制

fork函数从已存在进程中创建⼀个新进程。新进程为⼦进程,⽽原进程为⽗进程。所以,在C/C++上申请空间malloc or new 的时候,需要在物理内存里开辟空间吗??开辟虚拟空间即可!!(惰性空间开辟)真正使用的时候,OS才会给你做内存级申请->构建完整的映射关系。(对于用户来说,完全透明,她不知道,也无需知道)

2025-04-21 07:52:36 803

原创 4.回溯算法(随想录)

还有一种方法隐藏了回溯(利用形参不改变实参)

2025-04-20 20:22:04 117

原创 6. 字符串(随想录)

太6了(真不是人做的)

2025-04-20 20:21:26 167

原创 4.进程概念

本地变量:只在父进程(bash)内部有效!环境变量,为什么具有全局属性?环境变量被子进程继承下去,然后会子子孙孙哈哈哈内建命令:大部分命令是可执行程序。需要通过创建子进程的性质执行,linux中,有一部分命令,执行的时候,没有风险,需要bash自己执行,这种命令叫做内建命令5.程序地址空间。

2025-04-19 08:17:30 929

原创 3.基础开发工具

在我们的实际开发中,不可能将所有代码放在⼀个源⽂件中,所以会出现多个源⽂件,⽽且多个源⽂ 件之间不是独⽴的,⽽会存在多种依赖关系,如⼀个源⽂件可能要调⽤另⼀个源⽂件中定义的函数, 但是每个源⽂件都是独⽴编译的,即每个*.c⽂件会形成⼀个*.o⽂件,为了满⾜前⾯说的依赖关系,则 需要将这些源⽂件产⽣的⽬标⽂件进⾏链接,从⽽形成⼀个可以执⾏的程序。2.动态库与之相反,在编译链接时并没有把库⽂件的代码加⼊到可执⾏⽂件中,⽽是在程序执⾏时由 运⾏时链接⽂件加载库,这样可以节省系统的开销。其后缀名⼀般为“.a ”

2025-04-19 08:17:10 936

原创 ​2.linux权限

命令:su 【用户名】功能:切换用户*身份匹配,只会从拥有者,所属组,other的顺序,匹配成功一次2.chown功能:修改文件的拥有者格式:chown【参数】 用户名 文件名3.chgrp功能:修改文件或目录的所属组格式:chgrp 【参数】用户组名 文件名4.umask语法:file [选项⽂件或⽬录...

2025-04-18 14:09:57 190

原创 1.Linux基础指令

使用XShell 远程登录 Linux使用XShell 远程登录 Linux1.查看 Linux 主机 ip在终端下敲ifconfig指令, 查看到 ip 地址2.XShell 下的复制粘贴复制:粘贴:语法:ls [选项] [目录/文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。语法:pwd功能:显示用户当前所在的目录语法:cd⽬录名功能:改变工作目录。将当前工作目录改变到指定的目录下。语法:touch [选项。

2025-04-18 14:09:44 752

原创 24.并查集

在一些应用问题中,需要。。在此过程中。适合于描述这类问题的抽象数据类型称为。1.2.3.

2025-04-17 12:30:38 222

原创 23.智能指针的使用及其原理

1.智能指针的使用场景分析1.智能指针的使用场景分析下⾯程序中我们可以看到,new了以后,我们也delete了,但是因为抛异常导,后⾯的delete没有得到执⾏,所以就内存泄漏了,所以我们需要new以后捕获异常,捕获到异常后delete内存,再把异常抛出,但是因为new本⾝也可能抛异常,连续的两个new和下⾯的Divide都可能会抛异常,让我们处理起来很⿇烦。智能指针放到这样的场景⾥⾯就让问题简单多了。2.RAII和智能指针的设计思路3.C++标准库智能指针的使用4.智能指针的原理。

2025-04-17 12:30:20 341

原创 5.链表(随想录)

快慢指针。

2025-04-16 09:06:39 176

原创 22.异常

1.异常处理机制允许程序中独⽴开发的部分能够在运⾏时就出现的问题进⾏通信并做出相应的处理,异常使得我们能够将问题的检测与解决问题的过程分开,程序的⼀部分负责检测问题的出现,然后解决问题的任务传递给程序的另⼀部分,检测环节⽆须知道问题的处理模块的所有细节。2.C语⾔主要通过错误码的形式处理错误,错误码本质就是对错误信息进⾏分类编号,拿到错误码以后还要去查询错误信息,⽐较麻烦。异常时抛出⼀个对象,这个对象可以函数更全⾯的各种信息。

2025-04-16 09:05:23 690

原创 21.C++11

调试时发现一个问题ovo。

2025-04-15 17:36:55 1578

原创 3.数组(随想录)

还有一个小优化(可以不看)

2025-04-15 17:35:49 204

原创 2.区间dp

回⽂词是⼀种对称的字符串。任意给定⼀个字符串,通过插⼊若⼲字符,都可以变成回⽂词。此题的任务是,求出将给定字符串变成回⽂词所需要插⼊的最少字符数。⽐如Ab3bd插⼊2个字符后可以变成回⽂词dAb3bAd或Adb3bdA,但是插⼊少于2个的字符⽆法变成回⽂词。

2025-04-15 17:35:03 223

原创 19.哈希表的实现

1.哈希的概念1.哈希的概念哈希(hash)⼜称散列,是⼀种组织数据的⽅式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。1.2.直接定址法当关键字的范围⽐较集中时,直接定址法就是⾮常简单⾼效的⽅法,⽐如⼀组关键字都在[0,99]之间,那么我们开⼀个100个数的数组,每个关键字的值直接就是存储位置的下标。

2025-03-21 23:41:19 821

原创 1.背包问题

有n 种物品,第i 种物品有x.i个,每⼀个物品重量为w.i ,价值为v.i ,现有⼀个承重能⼒为T的背包,在不超过承重能⼒的情况下,背包种最多能装多少价值的物品。注意:空间优化不能求方案数,会有重复计算,如:9=1+2+4+2,按01背包求时会求两个1 2,但其实他们都是同一个物品。若背包恰好装满,求⾄多能装多⼤价值的物品?若背包恰好装满,求⾄多能装多⼤价值的物品?求这个背包⾄多能装多⼤价值的物品?求这个背包⾄多能装多⼤价值的物品?你有⼀个背包,最多能容纳的体积是。种物品,每种物品有任意多个,第。

2025-03-19 16:52:38 297

原创 18.封装红黑树实现mymap和myset

如下图:当it指向50时,++it时,50是40的右,40是30的右,30是18的右,18到根没有⽗亲,没有找到孩⼦是⽗亲左的那个祖先,这是⽗亲为空了,那我们就把it中的结点指针置为nullptr,我们⽤nullptr去充当end。迭代器++时,如果it指向的结点的右⼦树不为空,代表当前结点已经访问完了,要访问下⼀个结点是右⼦树的中序第⼀个,⼀棵树中序第⼀个是最左结点,所以直接找右⼦树的最左结点即可。*相⽐源码调整⼀下,key参数就⽤K,value参数就⽤V,红⿊树中的数据类型,我们使⽤T。

2025-03-18 19:37:11 372

原创 17.红黑树实现

红⿊树是⼀棵⼆叉搜索树,他的每个结点增加⼀个存储位来表⽰结点的颜⾊,可以是红⾊或者⿊⾊。通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因⽽是接近平衡的。检查4点规则,满⾜这4点规则,⼀定能保证最⻓路径不超过最短路径的2倍。按⼆叉搜索树逻辑实现即可,搜索效率为。*情况2:单旋+变色。*情况3:双旋+变色。

2025-03-14 19:55:24 271

原创 16.AVL树实现

AVL树实现这⾥我们引⼊⼀个平衡因⼦(balance factor)的概念,每个结点都有⼀个平衡因⼦,任何结点的平衡因⼦等于右⼦树的⾼度减去左⼦树的⾼度,也就是说任何结点的平衡因⼦等0/1/-1,AVL树并不是必须要平衡因⼦,但是有了平衡因⼦可以更⽅便我们去进⾏观察和控制树是否平衡,就像⼀个⻛向标⼀样。3.AVL树整体结点数量和分布和完全⼆叉树类似,⾼度可以控制在 ,那么增删查改的效率也可以控制在 ,相⽐⼆叉搜索树有了本质的提升。左右⼦树都是AVL树,且左右⼦树的⾼度差的绝对值不超过1。

2025-03-13 22:32:17 154

原创 15.map与set的使用

map底层的红⿊树节点中的数据,使⽤pair<Key, T>存储键值对数据。

2025-03-11 18:26:03 638

原创 *图论基础(5)

第 1⾏⼀个整数N ,表⽰家族的⼈数。接下来 N⾏,第 i⾏描述第i 个⼈的后代编号ai,j ,表⽰ai,j 是i 的后代。有个⼈的家族很⼤,辈分关系很混乱,请你帮整理⼀下这种关系。输出⼀个序列,使得每个⼈的后辈都⽐那个⼈后列出。是⼀种基于松弛操作的最短路算法,可以求出有负权的图的最短路,并可以对最短路不存在的情况进⾏判断。拓扑排序的⽬标是将有向⽆环图中的所有结点排序,使得排在前⾯的结点不能依赖于排在后⾯的结。输出⼀个序列,使得每个⼈的后辈都⽐那个⼈后列出。如果有多种不同的序列,输出任意⼀种即可。

2025-03-06 22:47:00 537

原创 *动态规划(4)

⽤于解决多阶段决策问题的算法思想。它通过将复杂问题分解为更⼩的⼦问题,并存储⼦问题的解(通常称为“状态”),从⽽避免重复计算,提⾼效率。因此,动态规划⾥,蕴含着分治与剪枝思想。

2025-03-04 23:34:54 213

原创 *算法中的数据结构(3)

这个权值可以表⽰当前结点与⽗结点之间的关系、距离或其他信息(注意,由于我们有路径压缩操作,所以最终这个权值表⽰的是当前结点相对于根结点的信息)。把真话⾥⾯的相互关系,⽤"带权并查集"维护起来,权值表⽰当前节点相对于根节点的距离。有⼀个⻓为n 的序列a ,以及⼀个⼤⼩为k 的窗⼝。合并操作:将元素 x所在的集合与元素 y所在的集合合并成⼀个集合;因此,栈⾥⾯存的是每个元素的下标。⽰⼀个集合,树中的节点表⽰对应集合中的元素,根节点来代表整个集合。如果栈⾮空,插⼊当前位置元素时的栈顶元素就是所找的元素。

2025-03-04 23:34:35 1154 1

原创 *搜索算法(2)

在 的棋盘上,摆有⼋个棋⼦,每个棋⼦上标有 1⾄8 的某⼀数字。要求解的问题是:给出⼀种初始布局(初始状态)和⽬标布局(为了使题⽬简单,设⽬标状态为123804765 ),找到⼀种最少步骤的移动⽅法,实现从初始布局到⽬标布局的转变。在搜索的过程中,如果发现特别多完全相同的⼦问题,就可以添加⼀个备忘录,将搜索的结果放在备忘录中。通过⼀个"备忘录",记录第⼀次搜索到的结果,当下⼀次搜索到这个状态时,直接在"备忘录"⾥⾯找结果。有⼀个 的棋盘,在某个点 上有⼀个⻢,要求你计算出⻢到达棋盘上任意⼀个点最少。

2025-03-04 23:34:06 1069

原创 *基础算法(1)

1.模拟P5731 【深基5.习6】蛇形⽅阵【题⽬描述】给出⼀个不⼤于9的正整数n,输出n×n的蛇形⽅阵。从左上⻆填上1 开始,顺时针⽅向依次填⼊数字,如同样例所⽰。注意每个数字有都会占⽤ 3个字符,前⾯使⽤空格补⻬。【输⼊描述】输⼊⼀个正整数n,含义如题所述。【输出描述】输出符合题⽬要求的蛇形矩阵【⽰例⼀】输⼊:4输出:1 2 3 412 13 14 511 16 15 610 9 8 72.高精度。

2025-03-04 23:33:17 535

原创 14.二叉搜索树

key/value的搜索场景实现的⼆叉树搜索树⽀持修改,但是不⽀持修改key,修改key破坏搜索树性质了,可以修改value。*⼆叉搜索树中可以⽀持插⼊相等的值,也可以不⽀持插⼊相等的值,具体看使⽤场景定义,后续我们学习map/set/multimap/multiset系列容器底层就是⼆叉搜索树,其中map/set不⽀持插⼊相等。树不空,按⼆叉搜索树性质,插⼊值⽐当前结点⼤往右⾛,插⼊值⽐当前结点⼩往左⾛,找到空位。如果⽀持插⼊相等的值,插⼊值跟当前结点相等的值可以往右⾛,也可以往左⾛,找到空位置,插。

2025-02-26 22:53:48 309

原创 12.继承

1.1继承(inheritance)机制是⾯向对象程序设计使代码可以复⽤的最重要的⼿段,它允许我们在保持原有类特性的基础上进⾏扩展,增加⽅法(成员函数)和属性(成员变量),这样产⽣新的类,称派⽣类。继承是类设计层次的复用。⽀持多继承就⼀定会有菱形继承,像Java就直接不⽀持多继承,规避掉了这⾥的问题,所以实践中我们也是不建议设计出菱形继承这样的模型的。:⼀个派⽣类有两个或以上直接基类时称这个继承关系为多继承,多继承对象在内存中的模型是,先继承的基类在前⾯,后⾯继承的基类在后⾯,派⽣类成员在放到最后⾯。

2025-02-22 14:22:01 672

原创 13.多态

派⽣类重写,但是语法上可以实现),只要声明即可。下⾯的代码我们可以看到,如果~A(),不加virtual,那么delete p2时只调⽤的A的析构函数,没有调⽤B的析构函数,就会导致内存泄漏问题,因为~B()中在释放资源。派生类中有一个跟基类完全相同的虚函数(即派生类虚函数与基类虚函数的返回值类型,函数名字,*参数的类型完全相同),则称派生类的虚函数重写了基类的虚函数。运行时到指向的对象的虚表中确定对应的虚函数的地址,这样就实现了指针或引用指向基类就调基类的虚函数,指向派生类就调用派生类对应的虚函数。

2025-02-21 16:47:58 629

原创 11.模板(进阶)

2.

2025-01-23 23:37:45 479

原创 10.Stack-Queue-Priority_queue

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中。元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用。比较,头插效率高,不需要搬移元素;,双开口的含义是:可以在头尾两端。

2025-01-22 22:52:39 892

原创 9.List(带头双向循环链表)

2.->运算符重载注意。4.模拟实现List。

2025-01-20 21:26:16 470

原创 8.Vector(顺序表)

扩容缩容都会导致迭代器失效,需要更新迭代器,如:erase函数,它本身会返回删除后迭代器的位置,so在应用中:it = erase();

2025-01-17 09:00:08 374

原创 6.模板初阶

【代码】6.模板初阶。

2024-11-29 10:01:11 470 2

原创 5.C/C++的内存管理

【代码】5.C/C++的内存管理。

2024-11-27 20:07:36 719 5

原创 4.类与对象(下)

静态成员变量不能在声明位置给缺省值初始化,缺省值是构造函数初始化列表的,静态成员变量不属于某个具体对象,不走构造函数初始化列表。~用类型定义出来的对象叫作匿名对象,相比之前我们定义的 类型对象名 定义出来的的叫有名对象。匿名对象生命周期只在当前一行,一般临时定义一个对象当前用一下即可,就可以定义匿名对象。~静态成员函数中可以访问其他的静态成员,但不能访问非静态的,因为没有this指针。(静态成员也是类的成员,受访问限定符限制)~非静态的成员原函数可以访问任意的静态成员变量和静态成员函数。

2024-11-24 21:45:29 1096 4

原创 3.类与对象(中)

1.构造函数。

2024-11-21 12:00:47 1842 3

原创 2.类与对象(上)

即struct中也可定义函数,这是类与struct的最大区别。

2024-11-17 22:32:00 568 4

原创 1.初识C++(随笔,不适合0基础看)

1.1.4 项目工程中多文件定义的同名namespace会认为是同一个namespace不冲突(其实是系统把他们合并到一起了)inline适合于频繁调用的短小函数,对于递归函数,代码多一些的函数,加上inline也会被编译器忽略---会造成 代码膨胀。1.1.2命名空间实际是定义一个域,这个域与全局域独立,不同的域可以定义同名变量,避免产生冲突。*设计目的是替代宏(宏替换不会像函数调用建立栈帧,更快,但是宏极易出错)函数局部域,全局域,命名空间域,类域。命名空间域,类域不会影响生命周期。

2024-11-17 13:15:51 525 4

原创 1.初识C语言---回忆型笔记(随笔 不适合0基础看哦)

2.变量与常量 (本质是向内存申请空间)1.数据类型2.

2024-11-15 20:55:56 1179 5

空空如也

空空如也

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

TA关注的人

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