自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C++ 继承】

继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。public:protected:// 姓名// 年龄// 继承后父类的Person的成员(成员函数+成员变量)都会变成子类的一部分。这里体现出了。

2024-04-28 17:24:25 980

原创 【Linux动态库和静态库】

在链接阶段,编译器会将编译后的目标文件和库文件链接成一个可执行文件。这时候库文件才发挥作用,它们被链接到可执行文件中,使得可执行文件包含了库中的函数和数据。对于静态库,链接器会将库中的目标文件直接复制并链接到可执行文件中;对于动态库,链接器只会在可执行文件中包含对动态库的引用,而不包含实际的库函数和数据。

2024-04-28 11:27:37 725

原创 【Linux —— 再谈软硬链接】

再谈软硬链接

2024-04-22 11:09:12 859 3

原创 【C++模板详解 —— 函数模板与类模板】

C++模板 ——— 函数模板和类模板

2024-04-18 20:30:05 862 4

原创 【STL详解 —— priority_queue的使用与模拟实现】

priority_queue模拟

2024-04-16 21:05:13 1162

原创 【STL详解 —— stack和queue的模拟实现】

stack与queue的模拟

2024-04-16 20:14:52 527

原创 【STL详解 —— stack和queue的介绍及使用】

首先先介绍一下容器适配器。容器适配器是一种设计模式,用于在现有容器的基础上提供新的接口或修改现有接口,以满足特定的需求或者提供特定的功能。在C++中,容器适配器通常是通过组合一个已有的容器来实现的。在C++标准库中,容器适配器是通过模板类来实现的,它们提供了特定的接口,使得用户可以方便地使用已有的容器来实现不同的数据结构或算法。常见的容器适配器包括:stack(栈):提供了后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。

2024-04-14 21:24:03 1010 1

原创 【STL详解 —— list的模拟实现】

如果 ListNode 的 _data 成员是内置类型(如 int, double, char 等),或者是一些简单的、不需要特殊资源管理的自定义类型(例如不涉及动态内存管理的类),那么编译器生成的默认析构函数足以正确清理 ListNode 对象。对于拷贝构造函数,我们先申请一个头结点,并让其前驱指针和后继指针都指向自己,然后将所给容器当中的数据,通过遍历的方式一个个尾插到新构造的容器后面即可。这样的封装提供了清晰的职责分离,并模仿了 STL 的设计哲学,每个类都具有特定的功能和目的。

2024-04-14 16:36:18 915

原创 【STL详解 —— list的介绍及使用】

list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。

2024-04-13 22:43:02 722

原创 【Linux基础IO】

man 2 open。

2024-04-10 15:01:29 701 4

原创 【C++STL详解 —— vector的模拟实现】

start_finish和。这些成员变量共同管理着vector的存储空间和元素。_start:指向数组开始的指针,也就是vector中第一个元素的位置。_finish:指向数组中最后一个有效元素之后的位置,这个位置是新元素插入的地方。:指向分配的内存空间结束的位置之后的那个位置。这个位置标记了vector可以在不重新分配内存的情况下扩展到的最远位置。:从start到end_of_storage的区域是vector当前分配的整个内存空间,它决定了vector能够容纳的最大元素数量(容量)。

2024-04-04 17:57:55 787

原创 【C++STL详解 —— vector的介绍及使用】

在C++中,vector是一个非常重要和常用的容器类型,它是标准模板库(Standard Template Library, STL)的一部分。简单来说,vector是一个能够存储任意类型元素的动态数组,其大小可以在运行时自动扩展或缩减。与普通数组不同,vector可以根据需要动态地增加或减少元素,而不需要程序员手动管理内存。vector是一个模板类,意味着它可以用来存储任意类型的对象。例如,vector用于存储整数,vector用于存储字符串。vector自动管理其存储的元素的内存。

2024-04-04 14:44:48 950

原创 【Linux进程控制】

将进程调度和内存解耦进行管理,让我们对应的进程访问地址时,内存时,以同一的视角访问,另外虚拟内存加页表,对我们的进程对应的内存操作,进行软硬件操控,对不合理的请求直接而截止,页表可以对我们的指定内存区域进行限设定。我们可以观察到,两次After的PID是不一样的,,但是第一个After的return值与第二个After的PID相同,所以我们根据上面的知识可以猜测到:第一个After是父进程,第二个是子进程。每一个数字表示一种失败的原因。在status的低16比特位当中,高8位表示进程的退出状态,即退出码。

2024-03-26 19:17:00 642 2

原创 【Linux 进程概念】

计算机管理硬件描述起来,用struct结构体组织起来,用链表或其他高效的数据结构。

2024-03-20 16:23:57 1068 3

原创 【C++STL详解 —— string类的模拟实现】

【代码】【C++STL详解 —— string类的模拟实现】

2024-03-09 12:11:57 408 1

原创 【C++STL详解 —— string类】

string s();//构造一个空字符串//复制s所指向的字符序列//复制s所指向的字符序列的前n个字符//生成n个c字符的字符串//生成str的复制//复制str中字符位置pos开始并且跨越len个字符的部分。

2024-03-06 20:36:31 1156 10

原创 【C++ 模板初阶】

class 类模板名// 类内成员定义下面来实现一个模板Vector,并且在内里定义的函数如果要在内外定义,需要加模板参数列表。public:,_size(0)//使用析构函数,在类内声明,内外定义~Vector();除此之外,类模板不支持分离编译,即声明在xxx.h文件中,而定义却在xxx.cpp文件中。

2024-02-27 19:17:47 943 1

原创 【C/C++内存管理详解】

new的原理调用operator new函数申请空间在申请的空间上执行构造函数,完成对象的构造delete的原理在空间上执行析构函数,完成对象中资源的清理工作调用operator delete函数释放对象的空间new T[N]的原理调用operator new[]函数,在operator new[]中实际调用operator new函数完成N个对象空间的申请在申请的空间上执行N次构造函数delete[]的原理在释放的对象空间上执行N次析构函数,完成N个对象中资源的清理。

2024-02-15 17:44:29 1038 3

原创 【C++类与对象(下)】

关键字explicit来修饰构造函数。

2024-02-10 13:03:52 959

原创 【Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)】

在我们每次重新生成可执行程序前,都应该将上一次生成可执行程序时生成的一系列文件进行清理,但是如果我们每次都手动执行一系列指令进行清理工作的话,未免有些麻烦,因为每次清理时执行的都是相同的清理指令,这时我们可以将项目清理的指令也加入到Makefile文件当中。对同一份源代码分别生成其release版本和debug版本的可执行程序,并通过ll指令可以看到,debug版本发布的可执行程序的大小比release版本发布的可执行程序的大小要大一点,其原因就是以debug版本发布的可执行程序当中包含了更多的调试信息。

2024-02-09 13:27:10 3437 2

原创 【Shell的运行原理以及Linux当中的权限问题】

该提示说你没有被超级用户(root)添加到信用列表当中,所以该条指令的权限得不到提升(你想想嘛,怎么可能让一个普通用户随意更改另一个普通用户的密码嘛),只有当你被超级用户添加到信任列表后,你才拥有提升当前指令权限的能力。但实际上你会发现,你所创建出来的文件和目录的权限值往往不是我们所翻译出来的值,原因就是创建文件和目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限是:mask&(~umask)实际上,新建文件的默认权限为0666,新建目录的默认权限为0777。

2024-02-04 16:49:42 996

原创 【Linux常见指令汇总(入门必备)】

特别注意: 上面说到 -f 是强制性删除,-r 是递归式删除,这两个结合在一起就是递归式强制性删除,千万不要执行以下指令,因为在Linux当中没有类似回收站的东西也没有撤销删除的功能,删除指令一旦执行则是不可逆的。4)网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、nslookup。2)-a 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类型,硬件平台类型,操作系统名称。

2024-02-04 00:51:30 960

原创 【C++类与对象(中)】

首先我们先了解一下:在C++中,数据类型可以分为。

2024-01-30 16:06:26 817

原创 【C++类与对象(上)】

首先来观察一下类的结构// 类体:由成员函数和成员变量组成 };// 一定要注意后面的分号class为定义类的关键字className为类的名字{ } 中为类的主体注意:类定义结束时后面的分号;不能省略类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。类声明放在.h文件中成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名.// 我们看看这个函数,是不是会产生歧义。

2024-01-27 17:02:02 901

原创 【C++入门基础】

C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。C++是基于C语言而产生的,它既可以进行C语言的过程化程序设计,又可以进行。

2024-01-26 16:36:10 778 6

原创 【数据结构 | 希尔排序法】

所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。但是要实现希尔排序,gap应该怎么设定呢?,此时的直接插入的时间复杂度就比较低。希尔排序法的基本思想是:先选定一个。,完成最后的排序,只不过此时的数组基。,所有记录在统一组内排好序。但是,最后gap的值总归会。,把待排序文件中所有记录。这样就可以保证最后一个的。

2024-01-14 21:30:38 706

原创 【数据结构 | 直接插入排序】

理牌的方法都是不用教的。将3和4移动到5的左侧,再将2移动到最左侧,顺序就算是理好了。这里,我们的理牌方法,就是直接插入排序法。扑克牌是我们几乎每个人都可能玩过的游戏。最基本的扑克玩法都是一边摸牌,边理牌。我们规定,从第一个数字开始,第二个数字与第一个相比,若小,则交换位置。当不小于前面这个数字时,则吧该数字插到。往前遍历,比较大小,若排。

2024-01-14 21:06:25 612 1

原创 【数据结构 | 直接选择排序】

直接插入排序(StraightInsertionSort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。扑克牌是我们几乎每个人都可能玩过的游戏°最基本的扑克玩法都是—边模牌,—两个变量来记录最大和最小值,初始化同时为数组第一个数字。顺序就算是理好了,这里我们的理牌方法,就是。缩短数组范围,再重复以上步骤,即可。然后通过遍历整个数组,更新。按照以上步骤完成代码。我们有如下数组需要排序。

2024-01-14 17:35:35 516

原创 【C语言题解】 | 572. 另一棵树的子树

若与root不相同,则仍需与root的子树进行相比较,直至比较完。该题目需要判断一二叉树是否为另一二叉树的子树。(判断是否二叉树是否相同可参考。相比较,判断二者是否相同。

2024-01-08 17:19:33 572 1

原创 【C语言题解】 | 144. 二叉树的前序遍历

为形参,在函数调用时用于返回改题目所求数组的长度,因为由于C语言的局限,只能返回一个参数,所以采用这种通过传入指针的形参,来改变函数外部实参的方法。因为根据上述代码,求得节点个数为n,则该数组一共有n个空间,控制写入数组的下标需要传入。首先先计算二叉树的节点个数,用于后续的数组空间申请。题目要求给一个二叉树的根节点,返回其。,形参的改变不影响实参的改变。首先先观察一下这个函数原型,函数构建数组,返回数组。为形参,传入根节点,

2024-01-08 16:46:11 481

原创 【C语言题解】 | 101. 对称二叉树

函数,然后再依次通过递归,判读根节点的左右节点的值是否相同,再往下递归。这个题目要求判断该二叉树是否为对称二叉树,此题与上一题,即。这个题有异曲同工之妙,故此题可借鉴上题。我们先传入需要判断二叉树的根节点,通过。

2024-01-08 16:28:23 537

原创 【C语言题解】| 100. 相同的树

通过分析这个题目,可知道传入两颗二叉树的根节点,然后逐个比较这两个二叉树的结构和值是否都一样,不同返回。我们将一颗二叉树分为根节点,左子树,右子树,左子树与右子树均是一颗独立的树,同时比较。若两颗子树的根节点左右子树不同(即结构不一致),则返回。若左右子树的跟节点值不同,则返回false。继续递归节点的左右子树,并且返回。

2024-01-08 16:06:13 532

原创 【C语言题解】 | 965. 单值二叉树

其次判断根节点是否有左子树和右子树,若存在则判断左右子树的值是否于根节点的值相同(不同则返回false,相同则继续)若正确,则继续向下递归,但是由于此题目要求返回。因为是左右子树都必须满足,所以是。,所以,我们需要返回。

2024-01-08 15:56:07 524

原创 【数据结构 | 二叉树入门】

采用分治的思想,从root开始递归,有叶子节点就返回1,这个二叉树一共三个叶子节点,所以有返回3次1,相加得3.在一棵二叉树中,如果所有分支结点都存在左子树和右子树并目所有叶子都在同。> 并且从左到右连续的满二叉树称为完全二叉树。还是采用分治思想,当k=1时,返回一个节点数。如下图,是一个二叉树,二叉树是一种特殊的树。是比较自然的想法,我们称这样的链表叫做。一层上,这样的二叉树称为满二叉树。(5)根结点既有左子树又有右子树。(4)根结点只有右子树。则这棵树的先序遍历为。则这棵树的中序遍历为。

2024-01-04 12:53:29 578 1

原创 【数据结构 | 堆及其堆排序】

堆的删除,规定只能删除堆顶的元素,即将堆顶元素和最后一个元素相互交换,然后再下调。排序的序列构造成-个大顶堆°此时’整个序列的最大值就是堆顶的根结点。(具实就星将具与堆数组的末尾元素交换,此时末尾元素就是最大值),然后将剩余的。它的基本思想是’将待。在建堆的时候,我们先从最后一个有孩子的节点开始下调,这样排的效率高。我们在这里写数组堆,里面有一个动态规划的数组,命名为a。:每个结点的值都大于或等于其左右孩子结点的值。:个结点的值都小于或等于其左右孩子结点的值。所以对于堆的插入即在数组的尾部插入数据。

2024-01-02 17:21:15 829

原创 【C语言题解】| 20. 有效的括号

因为要求括号的顺序与数量都得匹配,所有本题会用到栈的数据结构来解决这个问题。则当栈为空时,仍会调用。本题解将从C语言入手。

2023-12-25 16:53:22 519

原创 数据结构 | 栈的基本实现

栈(StacK)是限定仅在表尾进行插入租删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top)另一端称为栈底(bottom), 不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表,简称LIFO结构。这里为了理解,我们可以想象一个手枪的弹夹就是一个栈,它遵循先进后出的原则:首先它是一个线性表,也就是说,栈元素具体线性关系,但是它是一种特殊的线性表。在栈的概念里,不存在首,尾。我们规定对于栈的插入和删除只能在栈的栈顶进行!栈的插入操作,叫作。

2023-11-25 14:50:41 583 12

原创 【C语言题解】 | 876. 链表的中间结点

根据题目要求,返回中间节点,则我们可以先遍历一遍链表来求得其长度,然后根据长度求出中间节点即可。给你单链表的头结点 head ,请你找出并返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。,然后slow每走一步,fast走两步。这个方法使用两个指针,当有奇数个节点时,当。当有偶数个节点时,当。

2023-11-19 01:05:53 33 2

原创 【C语言题解】 | 203. 移除链表元素

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。我们知道,链表是由地址不联系的节点构成的,所以我们只需找到与。所指向的节点需要被删除,那么我们就只需要吧cur的前节点。并且该题目要求返回head指针,则我们仅需要更新。值相对应的节点,并将其从链表中剔除即可!为空指针,即不可以像上述指向next。我们在删除节点的代码部分添加了判断。,并将cur进行free。的节点进行free处理。

2023-11-19 00:47:31 29 2

原创 数据结构 | C语言链表讲解(新手入门)

链表(Linked List)是一种在计算机科学中常见的数据结构,用于存储和组织数据。链表由节点(Node)组成,每个节点包含数据和一个指向下一个节点的指针。链表不像数组那样在内存中是一块连续的存储空间,而是通过指针将节点分散存储在内存中。动态分配内存: 链表的节点在运行时动态分配内存,允许灵活地增加或删除节点,而不受固定大小的限制。非连续存储: 节点可以在内存中分散存储,不需要一块连续的存储空间。插入和删除高效: 插入和删除节点的操作相对高效,因为只需调整指针,而不需要移动大量数据。//定义链表。

2023-11-18 21:28:29 55 2

空空如也

空空如也

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

TA关注的人

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