- 博客(91)
- 问答 (29)
- 收藏
- 关注
原创 【Linux】进程状态
是不是很方便啊,因为这个类在程序运行中一直存在,那么我们在Linux中描述信息的task_struct也可以在回收的时候缓存在一个数据结构对象的链表中,如果我再次需要这个task_struct信息的对象,我们就可以直接从链表中拿出来实例化,不需要重新写一个task_struct。那种进程最怕内存泄露,常驻内存的进程,比如操作系统,,他一直不退出,为啥一直不退出,因为操作系统要管理软件和硬件这些啊,除非是系统关机了才退出,如果他发生内存泄露,那么就会问题很大。ps aux / ps axj 命令。
2025-05-21 15:39:57
1393
42
原创 【Linux】进程的基本概念
这个时候你会发现,if和else if居然在同时运行这是为啥呢?在我们写过的程序中,怎么可能同时满足if又满足else if, 接下来我们就要对于这个现象进行剖析。
2025-05-18 16:23:08
1692
47
原创 【数据结构】手撕AVL树(万字详解)
我们这里直接实现KV模型的AVL树,为了方便后续的操作,这里将AVL树中的结点定义为三叉链结构(也就是多了一个parent,为什么后面讲解),并在每个结点当中引入平衡因子(右子树高度-左子树高度除此之外,还需编写一个构造新结点的构造函数,由于新构造结点的左右子树均为空树,于是将新构造结点的平衡因子初始设置为0即可。//三叉链//存储的键值对//平衡因子(balance factor)int _bf;//右子树高度-左子树高度//构造函数, _kv(kv), _bf(0){}
2025-05-16 15:09:42
1854
46
原创 【Linux】冯诺依曼体系结构和操作系统的理解
举个例子,现在校长要求辅导员将计算机成绩排名前十的学生的各科资料以及平时表现记录拿过来,他将从这十名同学之中选出三名学生参加本次的编程大赛,当辅导员将资料拿来后校长选出三名学生说:“就这三个了,你找个老师对这三名学生进行一下强化训练,然后参加本次的编程大赛。”然后校长就什么也不管了。那如果我们想把问题交给计算机处理,我们就需要一个输入设备把我们问题所需要的数据和信息交给计算机,然后我们需要计算机给出我们处理的结果,就需要一个叫做输出设备的东西来让计算机把结果显示出来(比如显示器)补充知识:高内聚和低耦合。
2025-05-10 15:18:57
2081
53
原创 【数据结构】手撕二叉搜索树
析构函数完成对象中二叉搜索树结点的释放,注意释放时采用后序释放,当二叉搜索树中的结点被释放完后,将对象当中指向二叉搜索树的指针及时置空即可。如此进行下去,直到找到与待插入结点的值相同的结点判定为插入失败,或者最终插入到某叶子结点的左右子树当中(即空树当中)。⼆叉搜索树⼜称⼆叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树。待删除的两个节点都不为空。待删除结点的左子树为空。
2025-05-07 15:22:16
1934
53
原创 【Linux】gdb工具,Linux 下程序调试的 “透视眼”
until + 行号 —— 进行指定位置跳转,执行完区间代码 finish —— 在一个函数内部,执行到当前函数返回,然后停下来等待命令。d(delete) + 当前要删除断点的编号 —— 删除一个断点【不可以d + 行号】disable b(breakpoint) + 编号 —— 使一个断点无效【禁用断点】c(continue) —— 从一个断点处,直接运行至下一个断点处【VS下不断按F5】enable b(breakpoint) + 编号 —— 使一个断点有效【开启断点】
2025-04-25 20:10:30
2225
52
原创 【Linux】自动化构建,有Make就够了
在上一讲中,我们介绍了Linux下的编译器 - gcc/g++的使用,本节我们来介绍一下如何使用make/Makefile实现项目的自动化构建知道了如何在Linux上编译C语言代码,而且清楚了可执行文件a.out的由来,是从test.c经过预编译到test.itest.i经过编译到test.stest.s经过汇编到test.otest.o经过链接到a.out可是看着这些操作,如果说我们只编译一个文件还可以说过去,如果说要编译100个,1000个,1w个呢?
2025-04-22 21:57:50
2777
52
原创 【C++】深入浅出之多态
多态是指不同继承关系的类对象,去调用同一函数,产生了不同的行为。必须通过基类的指针或者引用调用虚函数。被调用的函数必须是虚函数,且派生类必须对基类的虚函数进行重写。1.这里派生类的指针去调用public继承下来的基类函数test, 那么test里面又去调用func, this(A*,j基类)指针调用func, 那么这里满足多态吗?多态两个条件(1):要实现多态效果,第⼀必须是基类的指针或引⽤,因为只有基类的指针或引⽤才能既指向基类对象也可以指向派⽣类对象(切片);
2025-04-20 20:08:11
1811
38
原创 【C++】深入浅出之继承
继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称为派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,而继承便是类设计层次的复用。例如,以下代码中Student类和Teacher类就继承了Person类。//父类public:protected:string _name = "张三";//姓名//年龄//子类。
2025-04-17 21:06:31
1208
29
原创 【C++】特化妙技与分文件编写 “雷区”
通俗一点,声明就是一个承诺,我现在要结婚买房了,但是钱还差5w,这时候你想起你的好哥们,让他借你5w,你哥们说好,我过几天就给你打过来(声明),这时候你就要等5天后去找他(链接);这就是模板的特性造成无法确定类型,又恰好因为没确定类型,后面单向操作导致test.i有定义不知道初始化什么类型,a.i有类型缺无法实例化。你哥们太关心你了,知道你还差钱,早偷偷的就把钱打给你了,这时候你还需要5天后去找他(链接)吗。使用非类型模板参数后,我们就可以在实例化对象的时候指定所要创建的静态数组的大小了。
2025-04-17 10:40:44
1096
22
原创 【C++】priority_queue的底层封装和实现
priority_queue的介绍优先级队列默认使用vector作为其底层存储数据的容器,在vector上又使用了堆算法将vector中的元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。注意: 默认情况下priority_queue是大堆。
2025-04-17 09:01:38
1004
14
原创 【C++】Stack和Queue的底层封装和实现
Stack可以封装成前面三个变量的形式,但是这里我们提出一个概念叫容器适配器,回归我们生活中的适配器,比如电源适配器,就是把电流转换成对应w数的,如67w,120w,而容器适配器简单来说就是复用已有的容器,在他的基础上改成完理想容器的特性和功能,就把旧容器转化成了一个新容器。2.对于list,尾插的时候,如果要大量插入数据,则需要一个一个的去开空间,而deque通过buffer这个机制,一下开出很多空间,避免了频繁开空间,对于系统来说开一个空间和开一块空间的效率是一样的,假设每个buffer的长度是10。
2025-04-16 09:21:39
1093
20
原创 【Linux】Linux下的gcc/g++编译器与动静态库
1.可以看到,其实对于从网吧中拿来的电脑,就是库中的那个函数,也就是将库中的整个函数直接放到你的程序中来,这样你完全不需要再到库中去调用函数了,直接在你的程序中使用即可。那这么来说你的学长就相当于是一个链接器,网吧就是一个动态库,你知道了动态库中所需要的这个函数的地址,然后你就顺藤摸瓜🍈地找到了这个地方,你的学长就做了一个链接的功能。3.但是你怎么知道这个库函数在哪里的呢?2.当你的同学去到黑网吧,然后得知被封了之后无奈返回后,这个时候你有这自己的电脑,完全不需要再去考虑是否有电脑可用的安全性了,
2025-04-14 23:07:01
1776
20
原创 【Linux】VIM 编辑器,编辑加速引擎
正常/普通/命令模式【Normal mode】控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。在此模式下无法进行代码编辑插入模式【Insert mode】只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式末行模式【Last line mode】文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift+: 即可进入该模式。
2025-04-14 20:35:57
1416
12
原创 【Linux】Linux 权限:数字背后的神秘 “门禁卡” 系统
所以我们到提权到root的根目录下创建目录共享,但是却发现我们创建目录的文件居然会被other删除,是因为目录中的文件修改删除操作是由目录的w权限决定了,也就是目录是三体人,文件是普通人,普通人的生死由三体人决定,这时候如果把目录的other角色的w权限关闭,共享文件的用户也不能对目录中的共享文件进行修改了,这时候我们就不能这样暴力解决,在目录的other角色的权限中加一个粘滞位t,里面的共享文件除了文件拥有者和root账号以外都不能删除。说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。
2025-04-10 19:03:48
1222
7
原创 【C++】list底层封装和实现
或许很多人有疑问,为啥list迭代器还要单独实现一个类来解决,而vector和string就可以直接写出来。我们先来回顾一下vector的迭代器可以看到我们不管是删除还是插入操作,如果我们想要找到下一个数据的地址,只需要简单的++或者–就行了,这就是原生指针,我们开辟空间的时候是开辟一块连续的空间但是对于链表,我们是一个节点一个节点的开空间,这样开出来的空间位置是随机的是不连续的,这时候我们再想要通过简单的++或者–就找到数据就不可能了。
2025-04-09 23:54:51
1507
10
原创 【C++】 string底层封装的模拟实现
或许有的兄弟会有疑问,为什么初始化_str的时候,开辟_str的空间要用 new char[1]而不是new char,这是因为我们string的数据存储都是连续存储在一起的,用\0标识结束位置,如果用new char那么单独在各个不连续的空间并不能让每个数据后面都有\0,所以我们new char[]连续的空间,存储在一起,在这块连续的空间后放上\0。因为我们接下来实现的类和和库中std命名空间的string类的类名相同,所以我们为了防止冲突,用一个bit命名的命名空间解决这个问题。
2025-03-30 21:16:36
433
1
原创 【C++】内存管理
看完了使用new/delete如何去操作C++中的【内置类型】,接下去我们来看看我们要如何去操作一个自定义类型首先我们来看看C语言中我们是如何去操作自定义类型的,下面有一个单链表的结构体,此时我们若是要构建出一个个链表结点的话,还需要去调用下面这个函数,很是麻烦int val;exit(-1);但如果用C++的话就不一样了,我们可以使用之前所学习过的构造函数初始化列表在开辟出空间的时候就做一个初始化的工作,做到事半而功倍int val;: val(x){}
2024-09-20 23:16:30
1192
2
原创 【C++】一起探究开挂神器——模板(初阶)
先来看到的就是其定义格式,函数模版加在函数上,那对于类模版的话就是加在类上class 类模板名// 类内成员定义我们以下面这个Stack类为例来进行讲解如果你学习了模版的相关知识后,一定会觉得这个类的限制性太大了,只能初始化一个具有整型数据的栈,如果此时我想要放一些浮点型的数据进来的话也做不到public:perror("malloc申请空间失败!!!");return;_size = 0;_size++;// 其他方法...~Stack()_size = 0;
2024-09-19 20:42:43
932
2
原创 【C++】类和对象(下)
特性2:友元函数不能用const修饰,因为友元函数只是一个全局函数,不属于类的成员函数,所以它没有隐藏的this指针,而const修饰的就是this指针,只有非静态的成员函数才能用const修饰。【单向】这个词很重要,一样还是上面的Date类,因为在Time类中声明了其为它的友元类,但是在Date类中没有声明Time为它的友元类,所以Time是无法访问到Date类中私有成员的。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字。
2024-09-14 15:45:52
1131
原创 【手撕数据结构】八大排序神功(上)
我们建堆就是为了排序数组,既然是升序,就是小的在前面,大的在后面。我们建大堆可以保证,堆顶一是最大的,这时候我们只需要把堆顶与数组最后一个元素交换,就可以保证数组最后一个元素是最大的。如果有一个关键码的集合K = { k0, k1, k2,…,kn-1 },把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中。i+2 ) i = 0,1,2…【时间复杂度】:O(NlogN)【时间复杂度】:O(N^2)【空间复杂度】:O(1)【空间复杂度】:O(1)【空间复杂度】:O(1)【空间复杂度】:O(1)
2024-09-07 21:43:29
746
原创 【手撕数据结构】二叉树的性质
目录叶子节点和边的性质概念小试牛刀叶子节点和边的性质概念可以看到度为0的节点如F没有边,度为1的节点如C有一条边,而度为2的节点如B有两条边。那么设度为2的节点为a个,度为1的节点为b个。二叉树边 = 2a+b另⼀⽅⾯,由于共有 a+b+c 个节点,所以边数等于 a+b+c-1这里-1是因为:综合上面两个公式,我们2a+b = a + b + c - 1; 推出c = a+1(c为度为0节点,a为度为2节点)所以叶子结点n0 = n2 + 1;小试牛刀这道题已经告诉了我们度
2024-08-31 22:19:14
624
1
原创 【C++】日期类的实现
前面我们已经学了类和对象上、中两个模块的内容了,我们可以综合学习的这些内容来实现一个日期类。日期类的实现我们用3个文件来实现,分别是,Date.h Date.cpp test.cppDate.h文件用于类中需要的成员函数的声明Date.cpp文件用于成员函数的实现test.cpp文件用于用户测试案列下面是Date.h的内容class Date//友元函数//友元函数解决类外面函数访问私有变量public://构造函数else。
2024-08-28 16:30:12
695
原创 【手撕数据结构】链式二叉树
所以当k=1的时候,是第k层,第k层节点个数实际就是第k-1层的左右孩子节点个数,求k-1层节点的左右孩子节点即可。📚当k > 1 时,第k层的结点个数为第k - 1层左孩子节点个数 + k-1层右孩子的结点个数。除了判断k之外,别忘了每次都要判断一下传进来的根结点是否为空,防止访问。规则:二叉树高度 = 左子树和右子树中高度大的那个 + 1。📚当k == 1时,return 1。规则:左子树——右子树——根。
2024-08-19 18:00:35
1090
原创 【手撕数据结构】Topk问题
对于Top-K问题,能想到的最简单直接的⽅式就是排序,但是:如果数据量⾮常⼤,排序就不太可取了。TOP-K问题:即求数据结合中前K个最⼤的元素或者最⼩的元素,⼀般情况下数据量都⽐较⼤。⽐如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。2)⽤剩余的N-K个元素依次与堆顶元素来⽐较,不满⾜则替换堆顶元素。,堆中剩余的K个元素就是所求的前K个最⼩或者最⼤的元素。将剩余N-K个元素依次与堆顶元素⽐完之后,然后。前k个最⼤的元素,则建⼩堆。前k个最⼩的元素,则建⼤堆。
2024-08-16 20:49:23
326
原创 【C++】拿捏运算符重载
所以当运算符重载函数放到类内时,就要改变其形参个数,否则就会造成参数过多的现象,在形参部分给一个参数即可,比较的对象就是当前调用这个函数的对象即【this指针所指对象】与【形参中传入的对象】【概念】:运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。时,C++语⾔允许我们通过运算符重载的形式指定新的含义。👉【参数类型】:const T&,传递引用可以提高传参效率。👉解决办法3:设置友元【不好,会破坏类的完整性】【函数原型】:返回值类型。
2024-08-16 12:25:49
983
原创 【C++】类和对象(中)
假设有这么个场景,你需要往栈里面入栈数据。Stack st;st.Push(1);st.push(2);但是一运行起来可以发现,程序却奔溃了,这是为什么呢?原来我们没有写Init函数,那么,栈都还没有开辟空间初始化这些仔细一想就发现好像是忘记Init()初始化了,加上之后就没有问题了那么问题就来了,我们使用栈这个数据结构的时候,有时总是会忘记初始化出问题。这在练习中可能容易发现,但是如果在一个大项目中就难以调试。这就要涉及到我们的构造函数(C++默认的6个函数之一)首先我们来介绍这六个函数。
2024-08-12 22:06:48
800
原创 【手撕数据结构】二叉树和堆
首先看到结构体的定义及声明,是不是回想起了我们之前所学的顺序表,因为顺序表的底层其实也是一种数组int size;}Hp;
2024-08-09 13:52:50
906
原创 【C++】类和对象(上)
C++中用class关键字来定义类,和C语言中结构体一样其中类的主体用{}括起来,并在后面加上分号类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数为了区分成员变量,在命名的时候开头用_或者m(不强制)// 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号【 注】:class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略还记得我们在数据结构中讲的栈吗?
2024-08-07 09:34:31
753
原创 【C++】内联函数vs宏 && nullptr
inline不建议声明和定义分离到两个⽂件,分离会导致链接错误。因为inline被展开,就没有函数地址址,链接时会出现报错。return 0;解决这个问题就直接把定义和声明写到同一个头文件中这样内联函数在展开的时候就可以找到地址#nullptrC++中NULL可能被定义为字⾯常量0,或者C中被定义为⽆类型指针(void*)的常量。不论采取何种。
2024-08-03 19:47:16
791
1
原创 【C++】初识引用
首先来看第一个,若是定义了一个引用类型的变量int&,那么就必须要去对其进行一个初始化,指定一个其引用的对象,否则就会报错int a = 10;int& b = a;int& c;
2024-08-03 18:37:22
1161
1
原创 【C++】初识C++
命名空间里面也可以嵌套命名空间。就像结构体里面也可以嵌套结构体这时候我们对于:是不是也可以封装在一个命名空间里面在嵌套定义两个命名空间//队列代码 {//单链表代码 } }
2024-08-01 22:04:21
1061
原创 【手撕数据结构】链表面试题进阶
新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。2.设置random指针,这就体现了我们为什么把新链表的节点尾插到旧链表中相对应的节点的好处,我们可以直接通过变量旧链表->random->next指针找到新链表中的random指针的位置。如果其中一个链表比另一个链表长就始终会比短的链表少走一步,这里我们不妨算出两个链表的长度,求他们的差值,让长的链表先走差值步,再长链表和短链表一起走就行了。如果链表无环,则返回 null。
2024-07-31 20:32:48
777
1
原创 【手撕数据结构】链表高频面试题
n1:记录指针指向将要反转的结点反转后要指向的位置。n2:记录指针指向将要反转的结点。n3:记录指针指向将要反转的结点的下一个结点。
2024-07-30 17:56:21
868
8
原创 【手撕数据结构】循环队列
而使用数组就可以直接移动front指针而不直接删除空间,如果需要重新利用删除的空间直接将front指针指向原来的空间,直接覆盖就行。这里我们需要多开辟一块空间,因为我们需要判断循环队列是否满了,这时候就有人说了,直接判断rear和front指针是否相等就行了啊.但是遗憾的是,我们队列为空的时候front也与rear相等。我们前面已经介绍过队列,他的基本操作就是在队头出元素,在队尾如元素。今天介绍的循环队列与前面的队列有所不同,他可以一直利用申请的空间进行循环的出队列,入队列等操作。
2024-07-29 14:27:59
488
1
原创 【手撕数据结构】栈和队列高频面试题
如果需要出栈,则将有数据的队列的size-1个元素移倒另外一个空队列中,将剩下的元素进行出栈。如果要出队列就把入队列的栈一直取栈顶导入为空的出队列中,这样原本1 2 3 4 的由于先进后出就达到了另外一栈存储的是4 3 2 1 这样的顺序,符合队列的先进先出原则。思路:该题是栈的典型应用,满足后进先出的规则(后入栈的前括号将优先与先出现的后括号相匹配)遍历字符串,遇到前括号直接入栈。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。否则,返回 false。
2024-07-28 22:54:29
300
空空如也
关于c语言自增运算符的问题
2023-11-03
关于C语言双字符串组合问题
2023-07-20
关于结构体访问问题.
2023-05-06
关于变量与自身自减的比较问题
2023-04-04
关于C语言逻辑与的断路特性问题
2023-03-12
关于C语言阶乘问题。,
2022-10-21
关于C语言数据类型转换的问题
2022-08-26
一道关于c语言编程问题
2022-04-30
关于printf函数格式输出%%d的问题
2022-04-04
数学表达式转c语言表达式
2022-04-03
c语言练习题望解答。
2022-03-09
mac os操作系统下vs code 编译器c语言头文件无法打开问题
2022-02-14
关于qsort库函数排序问题
2022-01-21
关于辗转相除法的过程
2022-01-03
关于break语句的问题
2021-12-11
关于c语言LNK2019问题
2021-12-10
关于函数被不明引用问题
2021-12-05
执行代码后无缘无故出现的数字
2021-12-04
编程实现循环代码。.
2021-11-29
关于自定义头文件的问题
2021-11-21
关于打印替换字符的问题
2021-11-13
关于变量新来旧去规则
2021-11-11
关于结构体返回问题.
2021-11-11
关于自定义函数问题。
2021-11-07
眼睛都看痛了,不知道怎么输出那个相加的数
2021-11-04
关于for循环工作过程问题
2021-11-04
按要求写出正确的逻辑表达式
2021-10-28
关于ASCll码字符型运算问题和复合运算符问题
2021-10-20
关于c语言代码书写格式的问题
2021-10-18
关于刚刚接触c语言数组的问题
2021-10-17
关于后辈的前途道路疑问的问题
2021-10-10
关于代码问题.?!。
2021-10-01
关于代码的错误问题.
2021-09-20
关于换行符的问题求解决
2021-09-11
c语言新小白第一次写代码问题
2021-09-11
小白入坑c语言的问题
2021-09-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人