自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【Linux】进程学习(二):进程状态

12481632 */task_struct是一个结构体,内部会包含各种属性,其中就有状态int status;

2024-02-08 20:02:51 1345

原创 【Linux】进程学习(一):基本认识

以前我们的任何启动并允许程序的行为,都是由操作系统帮助我们将程序转换成为进程,来完成特定的任务。当我们创建一个进程后,就会在/proc目录下创建对应的文件夹保存进程的信息。其次,通过不断启动终止进程,我们发现每次启动进程的pid都会改变,但是ppid并不会改变,这个ppid又是什么呢?其中有很多文件夹都是以数字命名,这些数字其实就是对应进程的PID,对应文件夹当中记录着对应进程的各种信息。因此fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的。

2024-02-08 20:02:16 1186

原创 【c++】STL详解(一):string类的使用

string类不仅是C++标准库中用于处理字符串的基础设施,它的设计和实现也体现了C++对效率和灵活性的追求。通过实际的代码示例,我们可以更深入地理解string类的应用和效果。

2024-02-07 22:30:08 1049

原创 【C++】模板入门教程

泛型编程的核心思想是编写独立于特定数据类型的代码。这意味着程序员可以定义一套算法或数据结构,而不必为每种可能的数据类型编写特定的代码实现。这种思想的实现极大地提高了代码的复用性和程序的可维护性。想象一下,如果没有泛型编程,对于简单的数据结构如列表、栈或队列,我们可能需要为整型、浮点型、字符串等每一种数据类型编写特定的实现。这不仅会导致大量重复的代码,也会使得维护和更新变得异常困难。泛型编程的一个经典例子是排序算法。不论是整数数组还是浮点数数组,甚至是自定义类型的数组,排序算法的逻辑结构是相同的。

2024-02-07 22:29:36 953

原创 【C++】内存管理深入解析

C++的动态内存管理是一个强大的特性,允许开发者在运行时分配和释放内存。然而,这也带来了额外的责任,如内存泄漏、野指针和重复释放内存等问题。通过遵循最佳实践和利用C++提供的工具,如智能指针和标准库容器,开发者可以有效地管理内存,写出更稳定、更高效的代码。

2024-02-06 20:57:30 972

原创 【c++】类和对象(下)

匿名对象是没有名称的对象实例,通常用于一次性的操作,如函数调用的参数或返回值。它们的生命周期非常短,仅存在于创建它们的表达式中。//假设存在类Aint main()A();//此处就是一个匿名对象return 0;内部类是定义在另一个类内部的类。这种结构用于隐藏实现细节,使得外部代码不能直接访问内部类的成员。class Apublic://B 称作 A 的内部类class Bprivate:int _b;内部类 ,跟A是独立,但是受A的类域限制。

2024-02-06 20:56:17 780

原创 【c++】类和对象(中)

调用了默认构造函数后,内置类型成了随机值。为了解决这个问题,c++11新增了个补丁。

2024-02-05 17:29:07 821

原创 【c++】类和对象 (上)

c++ 类和对象上 第一部分 基本形式,访问限定符,成员变量,成员函数,实例化及调用,类的大小,this指针

2024-02-05 13:45:52 878 1

原创 【Linux】make/Makefile的简单使用

对make和makefile的简单理解及使用make是一条命令,makefile是一个文件,两个搭配使用,完成项目自动化构建。

2023-01-13 16:00:50 2189 8

原创 【Linux】静态库和动态库的理解

简单理解Linux中静态库和动态库,如何使用动态链接,静态链接和动态链接的优劣。

2023-01-11 19:59:22 1056 11

原创 掌握七大排序(4)--- 归并排序

归并排序的思想及递归和非递归的算法实现

2023-01-10 17:36:31 939 6

原创 掌握七大排序(3)--- 快速排序

带你深入学习快速排序的三种单趟排以及非递归算法,了解快排的缺陷以及如何优化。

2023-01-10 11:43:33 1147 11

原创 【Linux】程序翻译的四个阶段及编译器gcc/g++的验证

为了在系统上运行一个程序,每条C语句都必须被其他程序转化为一系列的低级机器语言指令,然后这些指令按照一种为可执行目标程序的格式打好包,并以二进制磁盘文件的形式存放起来。目标程序也称为可执行目标文件。在Linux操作系统上,从源文件到目标文件的转化是由编译器驱动程序(gcc/g++)完成的。gcc在Linux下负责编译C语言,g++主要负责编译C++。上面这个指令,gcc编译器驱动程序读取源程序文件hello.c,并把它翻译成一个可执行目标文件hello。

2023-01-08 18:07:17 1923 7

原创 Linux编辑器 --- vim

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式(Insert mode)下,或者到 底行模式(last line mode)。只有在插入模式下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。在命令模式下,shift+: 即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入:help vim-modes。

2023-01-06 21:44:11 1444 9

原创 掌握七大排序(2)--- 选择排序,堆排序和冒泡排序

直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用时间复杂度:O(N^2)空间复杂度:O(1)稳定性:不稳定堆排序使用堆来选数,效率就高了很多。时间复杂度:O(N*logN)空间复杂度:O(1)稳定性:不稳定冒泡排序是一种非常容易理解的排序时间复杂度:O(N^2)空间复杂度:O(1)稳定性:稳定。

2023-01-06 08:00:00 1468 7

原创 图说数据结构---堆

数据结构---堆图解你必须知道这些!!

2023-01-02 21:29:02 2473 4

原创 数据在内存中的存储 ---整形

整形家族浮点数家族:构造类型:指针类型空类型:我们之前讲过一个变量的创建是要在内存中开辟空间的。空间的大小是根据不同的类型而决定的。那接下来我们谈谈数据在所开辟内存中到底是如何存储的?我们知道为 a 分配四个字节的空间。 那如何存储?下来了解下面的概念:原码:直接将二进制按照正负数的形式翻译成二进制就可以。反码:将原码的符号位不变,其他位依次按位取反就可以得到了。补码:反码+1就得到补码。正数的原、反、补码都相同。\color{#FF0000}{正数的原、反、补码都相同。}正数的原、反、补码都相

2022-12-31 15:26:13 722

原创 掌握七大排序(1)---直接插入排序和希尔排序

元素集合越接近有序,直接插入排序算法的时间效率越高时间复杂度:O(N^2)空间复杂度:O(1),它是一种稳定的排序算法稳定性:稳定**希尔排序是对直接插入排序的优化。当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定:稳定性:不稳定。

2022-12-27 12:42:14 1207 5

原创 用一个故事讲清Linux操作系统的粘滞位

粘滞位的理解与使用(故事讲解)

2022-12-09 19:45:49 1077

原创 牛客网---链表中倒数第k个结点

快指针先走k个结点,之后和慢指针同时移动。当快指针为空时,慢指针就指向倒数第k个结点。输入一个链表,输出该链表中倒数第k个结点。之后再同时移动,slow的指向即为所求。例如k=3,先让fast移动3次。下面一个题目同样用到了这种方法。

2022-11-13 16:19:56 711

原创 LeetCode---876.链表的中间结点

快指针一次移动两个结点,慢指针一次移动一个结点。利用相对位移,快指针每次的位移是慢指针的两倍,所以,当快指针走到尽头时,慢指针在链表的中间结点。给定一个头结点为 head 的非空单链表,返回链表的中间结点。此时循环结束的条件是fast->next为空。如果有两个中间结点,则返回第二个中间结点。此时循环结束的条件是fast为空。一:链表的个数是偶数个。二:链表的个数是奇数个。基于以上分析,代码如下。

2022-11-13 16:08:42 682

原创 LeetCode---206.反转链表

创建指针cur遍历原链表,头插至rListNode处。之后先让cur移动,移动head指向的结点,再将rListNode移动到head处,head移动到cur处。注意不能将cur的next指向head,这样就找不到下一个结点。此时还需将head结点的next的指向,因此循环结束的条件为head为空,不能是cur为空。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。定义prev指针指向head的前一个结点,cur指向后一个结点。最后cur已经为空,不能移动,所以需要增加一个条件判断。

2022-11-13 15:45:50 610

原创 牛客网---OR36链表的回文结构

对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。判断A和rhead所指向的值是否相同,如果相等两指针分别后移一次,直至两指针中出现空,循环结束。找到链表的中间结点,将中间结点之后的链表反转,与中间结点之前的链表进行对比,相同即为回文结构。将中间结点之后的链表反转。

2022-11-06 16:19:16 421

原创 牛客网---CM11链表分割

现有一链表的头指针 ListNode* pHead,给一定值x,编写一段代码将所有小于x的结点排在其余结点之前,且不能改变原来的数据顺序,返回重新排列后的链表的头指针。

2022-11-06 14:42:34 430

原创 LeetCode--- 26. 删除有序数组中的重复项

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。将最终结果插入 nums 的前 k 个位置后返回 k。

2022-10-31 20:12:49 413

原创 LeetCode ------ 27.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。创建一个数组,将不等于val的值放入新数组中,之后再将新数组的值拷贝回原数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。时间复杂度O(n^2)

2022-10-31 19:57:01 384

原创 LeetCode--- 189.轮转数组

leetcode ------ 189.轮转数组

2022-10-29 22:40:48 376 1

空空如也

空空如也

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

TA关注的人

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