- 博客(50)
- 收藏
- 关注
原创 网络篇--网络基础
我们计算机在这个里面也是有各种各样的协议,那OS系统也需要将我们的协议进行管理,:先描述在组织。我们利用结构体:int a;int b;int c;我们的OS是使用C语言写的,TCP IP也是用C语言写的,我们无论是Linux还是Windows网络代码是一样的,结构体类型也是一样的,(在我们的Windows中 有上面的结构体,那Linux也有这个结构体)。这样二者都具有同样的类型,这不就是进行了约定吗。所以所谓协议,就是通信双方都认识的结构化的数据类型(结构体就是我们的协议)
2025-03-16 15:32:07
670
原创 冯诺依曼结构和进程概念及其相关的内容的简单介绍
我们的校长去管理学生的数据时,创建一个我们的学生的结构体(struct) ,里面包含我们的学生的一些资料,我们校长对学生的信息进行管理实际上是对我们的结构体进行管理,我们将我们的学生的结构体利用我们的链表将没所有学生的信息串联起来,那么我们去遍历和查找我们的信息,实际上就转换为对链表的增删查改了。( 李美,也就是我们的系统调用)我们的操作系统就像我们的管家,不用我们的去概念底层的是如何实现的,只需要你把你要干什么,要什么告诉我们的操作系统,他就会去实行,完成我们的任务。的结构体来管理我们的进程的属性。
2025-01-31 22:32:01
724
原创 Linux的权限和一些shell原理
我们把文件给别人,需要得到别人的允许,草鸡用户不需要,可以直接给,但是去询问不方便,我们一般直接sudo权限提权去进行。
2025-01-24 23:44:32
2377
2
原创 Linux的常用指令的用法
重定向:控制输入输出的位置,常见符号包括 >(输出重定向)、<(输入重定向)、2>(错误输出重定向)。管道:将多个命令连接起来,把一个命令的输出作为下一个命令的输入,常用符号是 |。
2025-01-24 20:46:48
1377
原创 c++进阶---继承
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象 程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继 承是类设计层次的复用。下⾯我们看到没有继承之前我们设计了两个类Student和Teacher,Student和Teacher都有姓名/地址/ 电话/年龄等成员变量,都有identity⾝份认证的成员函数,设计到两个类⾥⾯就是冗余的。
2024-12-08 20:32:08
1014
1
原创 c++的模板进阶
模板参数分类类型形参与非类型形参。出现在模板参数列表中,跟在class或者typename之类的参数类型名称。非类型形参,就是用一个常量作为类(函数)模板的一个参数,在类(函数)模板中可将该参数 当 成常量来使用。是可以给缺省值的。当我们定义了stack类。我们想要里面的数组可以按照我自己的想法来定义大小。就可以给他添加一个:template的模板,private:int _a[N];int _top;
2024-11-18 17:52:59
758
原创 c++之 stack(栈)和queue(队列)
文档stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器, 默认情况下使用deque。
2024-11-04 16:58:15
931
3
原创 leedcode---二叉树最近的祖先节点
通过上面不同的情况我们发现,把我们的路径当成一段链表,那么我们的题目就可以装化成为一个,求两个链表相交的问题。我们得把我们的两条路径求出来。这个我们就得通过我们的栈来存储,里面存储的是我们的二叉树的节点。但是这种方法的效率比较低, 假如我们的情况比较极端,如图:是一个O(N^2)。我们以示例一为例子:将我们的示例画成树状图形去进行观察,我们用一个函数来实现,本质是一个前序查找。我们的4到根节点:4->2->5->3。的是我们要寻找的最近公共祖先节点。我们的6到根节点:6->5->3。我们来看一下我们的的。
2024-10-16 11:18:31
880
原创 数据结构---二叉搜索树(二叉排序树)
左子树不为空,左子树上的值都小于我们的根节点上的值。右子树不为空时,右子树上的值都大于我们的根节点上的值左右子树都是二叉搜索树(二叉排序树)。我们的二叉搜索树可以支持插入想同的值,也可以不支持,这分情况的。我们的set和map是 不支持我们的插入相同的值的,但是我们的multiset和multimap 是支持可以插入相同的值的。他们的底层是二叉搜索树。
2024-09-21 21:33:39
1250
1
原创 c++进阶--多态
发生在继承关系中,不是继承关系,即使满足下面两个条件也不成立。必须要是父类的指针或者引用。子类必须重写/覆盖我们的父类的虚函数。重写/覆盖条件:三同:参数、函数名和返回值相同。说明:要实现多态效果,第⼀必须是基类的指针或引⽤,因为只有基类的指针或引⽤才能既指向派⽣ 类对象;第⼆派⽣类必须对基类的虚函数重写/覆盖,重写或者覆盖了,派⽣类才能有不同的函数,多 态的不同形态效果才能达到。
2024-09-13 13:45:24
1079
原创 数据结构排序之快排
1. 快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序2. 时间复杂度:O(N*logN)3. 空间复杂度:O(logN)4. 稳定性:不稳定。
2024-09-04 21:21:20
784
原创 Leedcode202题-----快乐数(双指针算法)
由题目我们可以知道我们最终的结果要么最后结果是一,要么会有一次算出来的数字和之前算出来的数字出现重复现象,这就会导致进入一个环里面,一直死循环,
2024-08-15 20:11:48
303
原创 排序算法----希尔排序
希尔排序,又称“”(Diminishing Increment Sort),是由美国计算机科学家Donald Shell于1959年提出的一种排序算法。它是直接插入排序算法的一种改进版本,旨在通过减少插入排序中的交换操作和比较次数,从而提高排序效率。希尔排序通过将待排序的数组元素分成多个子序列,然后对每个子序列进行直接插入排序,最后当整个序列“基本有序”时,再进行一次直接插入排序来完成排序过程。
2024-08-14 23:43:40
785
原创 stl---vector
对于我们库里面的vector。被包含在一个<vector>的头文件中vector 是 C++ 标准模板库(Standard Template Library, STL)中的一个非常重要和常用的容器。它提供了一种动态数组的实现,允许你在运行时动态地增加或减少元素的数量,同时保留元素的顺序。vector 内部通过连续的内存空间来存储元素,这意呀着它可以快速地访问任何位置的元素(通过索引),但向vector中插入或删除元素(尤其是在非末尾位置)时可能会相对较慢,因为可能需要重新分配内存并移动元素以保持连续性。
2024-08-14 23:43:29
1544
原创 c++中的仿函数
仿函数是一个类或者结构体,它重载了函数调用操作符operator()。这使得它可以像函数一样被调用,因此有时也称为函数对象。与普通函数不同,仿函数可以具有内部状态,这使得它们可以在不同的调用之间保持状态,这是普通函数无法直接实现的。通过这种方式,仿函数可以更加灵活地应对各种需求。在 C++ 中,定义一个仿函数可以是一个类,其中重载了operator()public:这样就可以像调用函数一样使用MyFunctor。
2024-08-06 21:24:23
1087
原创 new和malloc的区别
在C++中,new操作符用于在(heap)上,存并返回指向该内存的指针。当你使用new来分配内存时,如果你希望定位(placement)这个内存分配到特定的地址上,你需要使用“定位new”(placement new)语法。这在某些特定场景下非常有用,比如当你已经有了一块分配好的内存,希望在这块内存上直接构造对象,而不是重新分配内存。
2024-07-30 23:28:09
926
原创 赋值运算符重载和运算符重载
这一特性极大地增强了C++的表达能力,使得自定义类型的使用更加直观和自然。例如,如果我们定义了一个复数类,那么通过重载+运算符,我们就可以直接对两个复数对象进行加法运算,而无需编写复杂的函数调用来实现相同的功能。然而,运算符重载并非没有限制。我们需要遵守C++语言对运算符重载的规则,以避免潜在的问题和混淆。
2024-07-23 22:28:49
848
原创 类和对象中
拷贝构造函数是一种特殊的构造函数,它只有一个参数,该参数是对同类型对象的引用(通常是const引用,以防止在初始化过程中修改被复制的对象)。其一般形式如下:cpp复制public:// 拷贝逻辑// 其他成员函数...1. 拷贝构造函数是构造函数的一个重载形式。2. 拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式编译器直接报错, 因为会引发无穷递归调用。
2024-07-18 15:05:37
779
原创 c++基础语法之内联函数
在C++编程中,性能优化是一个永恒的话题。内联函数(Inline Functions)作为提高程序执行效率的一种重要手段,在编译器优化过程中扮演着关键角色。定义:内联函数是C++中一种特殊的函数,它建议编译器在调用该函数时,将函数体直接插入到每个调用点,而非按照通常的函数调用机制进行(即不生成函数调用的机器代码,不保留栈帧等)。关键字:在C++中,通常使用inline关键字来声明一个函数为内联函数。但请注意,inline仅是对编译器的建议,编译器有权忽略这个建议。它和我们函数的写法其实是一样的,只是多了一
2024-07-13 22:39:22
402
1
原创 类和对象(上)
将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来 和对象进行交互。封装是一种管理,让我们更方便使用类。对于电脑这样一个复杂的设备,提供给用 户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日 常事务。但实际上电脑真正工作的却是CPU、显卡、内存等一些硬件元件。我们不在乎里面的是怎么实现的,计 算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以 及键盘插孔等,让用户可以与计算机进行交互即可。
2024-07-12 21:26:26
573
原创 c++语法之引用
我们的引用就是我们的的别名一样,给我们的变量取了另外一个别名。比如我们每个人都会有一个小名,别人喊和这个名字,就是喊得你自己本人,这里的变量也是一样的,这里引用的值进行改变,也会改变别引用的那个值,变量和他的引用用同一块空间,他们的地址是一样的,引用和我们的指针有点相似,但是他会比我们的指针使用的方便。但是它不能替代我们的指针。
2024-07-10 17:45:16
671
原创 C++基础语法之重载引用和命名空间等
缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实 参则采用该形参的缺省值,否则使用指定的实参。我们的缺省参数其实就是给了一个默认的值,int main()Func();// 没有传参时,使用参数的默认值Func(10);// 传参时,使用指定的实参return 0;我们使用缺省参数的时候可以不传参数,使用默认参数。
2024-07-08 18:31:52
1074
原创 排序1---插入排序
我们插入排序就是我们先假设前面的一段区间有序,然后从这个区间的后面一个位置开始,将该位置的值定位待插入的值,待插入的值与该区间的值进行比较,如果区间里面的值大于我们的待插入的值,就将这个值往后移一位,再继续比较,一直到我们比较完最后一个值,或者比较到一个比我们待插入值要小的值,这个时候我们就停止我们的比较。在将我们待插入的值插入比待插入值要小的值的后。首先我们要将我们待排序的值用一个变量存下来,因为我们往后面移动的这个行为会直接将后面的值给覆盖,这时我们待插入的值如果没有取出来的就会导致你找不到这个值了。
2024-06-16 17:26:18
464
原创 数据结构---树,二叉树的简单概念介绍、堆和堆排序
在我们将堆之前,我们先来了解一下我们的树。我们的堆是属于树里面的一种,树是一种非线性结构,是,也就是我们的一个节点可能有多个后继节点,当然也可以只有一个或者没有。,我们把它叫做树是因为他的结构和一颗倒挂的数很像。
2024-05-23 17:36:25
705
1
原创 Leedcode题目:移除链表元素
这个题目就是要我们将我们的链表中的值是val的节点删除。我们题目提供的接口是传入了指向一个链表的第一个节点的指针,和我们要删除的元素的值val,不只要删除第一个,
2024-05-11 22:49:13
419
2
原创 数据结构之链表篇
链表是一种在 物理存储上不连续,但是在逻辑结构上通过指针链接下一个节点的形成一个连续的结构。他和我们的火车相似,我们的元素是可以类比成车厢,需要将⽕⻋⾥的某节⻋厢去掉/加上,不会影响其他⻋厢,每节⻋厢都是独⽴存在的。这就挺现了一个好处:就是我们在插入删除的时候不用将其他的元素进行移动,我们只需要将指针的指向进行改变就行。所以在我们考虑使用顺序表还链表的时候,就可以考虑我们是否需要频繁的插入和删除我们的元素。
2024-05-11 02:00:00
2531
原创 fgets和fputs函数的使用
我们程序的数据需要输出到各种外部设备,也需要从外部设备获取数据,不同的外部设备的输⼊输出 操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念。在进行数据读写操作时,文件可以通过流的形式被程序处理C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的,而我们这个里的函数就是往我们的文件里面写入和输出内容。我们这里的两个函数是顺序读写的。他们适用于所有的输入输出流。
2024-05-06 11:34:52
447
原创 贪吃蛇的C语言实现
释放掉蛇⾝的最后⼀个节 点。易错点:这⾥最容易错误的是,释放最后⼀个结点后,还得将指向在最后⼀个结点的指针改为NULL, 保证蛇尾打印可以正常结束,不会越界访问。
2024-05-01 22:36:57
678
原创 轮转数组(Leedcode)的题目
我们又是什么情况,假如这里我们的k是10的话是不是和移动3次的结果一样呢,所以这里我们需要去做一个处理,就是:k=k%numsSize,这个就是我们真正要移动的次数;输入: nums = [1,2,3,4,5,6,7], k = 3。输入:nums = [-1,-100,3,99], k = 2。这是一类接口性质的题目;向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]输出: [5,6,7,1,2,3,4]
2024-04-22 19:50:37
476
2
原创 数据结构之顺序表
数据结构是计算机存储、组织数据的⽅式。数据结构是指相互之间存在⼀种或多种特定关系的数据元素的集合。数据结构反映数据的内部构成,即数据由那部分构成,以什么⽅式构成,以及数 据元素之间呈现的结构。一个简单的例子:我们的牧民养了很多羊,然后我们的羊是放养在牧场,假如你突然要找一个羊假如他叫小咩;在这个随便放养的情况下,我们并不知道这只羊在哪,很难找到,但是假如你建了个养殖场,里面的每个羊都被有序的管理着这样你想找某个羊就很容易了,就可以可以通过一些编号,和你管理时所用的方法去寻找,
2024-04-13 19:17:55
2410
3
原创 柔数组的介绍
这个词你可能没有听过但是他的确是存在的。1.在c99中结构中的最后⼀个元素允许是未知⼤⼩的数组,这就叫做『柔性数组』成员2这就代表了它存在与结构体中,很重要的一点是,他只能是结构体的最后的一个成员,这是为了方便柔数组的大小发生变化,柔数组的的大小是可以发生变化的,就代表他需要去自己开辟空间和调整空间,这就要用到我们的动态内存开辟空间的函数malloc,calloc, realloc(这个用来调整空间的)。柔数组的数组长度是可以不给定的,
2024-03-30 15:00:16
440
2
原创 C语言程序编译和链接
我为什么我们有多个不同的.c的文件,然后我们通过声明我们就可以使用利用这个文件里面的内容了呢,这就是我们链接的功劳了。,这些如果直接交给机器去处理机器是看不懂的,就像我们和外国人语言不通一样,如果想要变成机器看的懂的语言的话就需要我们的编译器来将这些程序转换成二进制。我们的汇编过程是我们的汇编器完成的,主要是把我们的刚刚生成的汇编代码转换成机器能听得懂的语言(二进制),进行一一翻译。3 就是把我们的的在文件中的注释在预处理时候就汇删除,因为我们的注释就是给我们的程序员看的,机器不需要的。
2024-03-27 21:26:42
1208
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人