自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 (linux操作系统)环境变量

linux中也有环境变量,windows同样也有,

2025-04-02 22:51:15 864

原创 (linux操作系统)进程的切换与调度

说到进程的切换与调度,我们先来看一个东西,这个东西叫做进程的优先级。

2025-03-28 14:28:50 966

原创 (Linux操作系统)进程状态

那么什么样的进程产生僵尸进程的概率大呢,那就是常驻内存里面的进程,像我们的操作系统,操作系统也是一个纯管理的软件,是一个由多个组件和进程组成的复杂系统,操作系统难免会产生一些僵尸进程,在我们日常使用电脑的时候,如果长时间不关机(在排除电脑硬件因为长时间运行导致温度升高,硬件性能下降的情况下),是不是就会变卡,当我们重启电脑之后,我们的操作系统又流畅许多了,

2025-03-23 11:36:11 639

原创 (linux操作系统)从冯诺依曼体系结构到初识进程

计算机管理硬件。

2025-03-14 13:00:36 10978

原创 linux_makefile自动构建小程序

Makefile 是一个特殊类型的文件,它用于自动化构建过程,特别是在编程中编译和安装软件时。在 linux 系统中,make 工具会使用 Makefile 文件中的指令来决定如何编译和链接程序。有了makefile我们就可以非常方便的去编译和清除我们的代码。我们来写一个简单的makefile文件来看看我们来分析一下,首先我们要明白一个东西,叫做依赖方法和依赖关系,这里我们来举一个例子来说明一下,我们上面的代码也同样是这个道理。

2025-03-07 14:05:41 792

原创 C++哈希表(链地址法)

哈希表链地址法就是为了解决哈希表开放地址法的哈希冲突问题所设计的,如果不知道哈希表开放地址法的可以去看看这篇文章,链地址法的设计的设计方式就是使用一个指针数组,开放地址法的元素是直接存放在哈希表中的,而链地址法的元素不是直接存放在哈希表中,而是用一个指针数组,如果没有数据映射到这个位置时,这个指针为空,有多个数据映射到这个位置时,我们把这些冲突的数据链接成⼀个链表,挂在哈希表这个位置下⾯,像下面这样。这样就可以有效的解决哈希冲突,不会去抢占别人的位置,

2025-02-26 16:27:31 755

原创 C++哈希表(开放地址法)

哈希(hash)⼜称散列,是⼀种组织数据的⽅式。从译名来看,有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系,查找时通过这个哈希函数计算出Key存储的位置,进⾏快速查找。也就是说给定一个数值,快速查找出这个数值的所在位置。

2025-02-19 11:17:08 929 2

原创 初步简单的理解什么是库,什么是静态库,什么是动态库

库根据名字我们应该很容易理解,在我们日常生活种,包含库的东西有很多,像仓库,库房那些,库是拿来存放,方便管理东西的,在我们编程当中,库的定义也是如此假设我们要写一个非常简单的C程序,在屏幕上输出hello,world,实现这个功能很简单,我们只需要把头文件一包,代码一写,不到1分钟就可以实现,非常的迅速,这就是利用了才让我们写代码的效率变得很高效。

2024-12-05 21:30:21 873 1

原创 利用红黑树封装map,和set,实现主要功能

如果不知道红黑树是什么的时候可以去看看这个。

2024-12-04 13:07:37 1106 2

原创 C++红黑树

红⿊树是⼀棵⼆叉搜索树,他的每个结点增加⼀个存储位来表⽰结点的颜⾊,可以是红⾊或者⿊⾊。通过对任何⼀条从根到叶⼦的路径上各个结点的颜⾊进⾏约束,红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍,因⽽是接近平衡的。1.每个结点不是红⾊就是⿊⾊2. 根结点是⿊⾊的3. 如果⼀个结点是红⾊的,则它的两个孩⼦结点必须是⿊⾊的,也就是说任意⼀条路径不会有连续的红⾊结点。4. 对于任意⼀个结点,从该结点到其所有NULL结点的简单路径上,均包含相同数量的⿊⾊结点那么为什么红⿊树确保没有⼀条路径会⽐其他路径⻓出2倍其

2024-11-28 21:39:24 647 1

原创 C++AVL树详解

AVL树是最先发明的⾃平衡⼆叉查找树,AVL是⼀颗空树,或者具备下列性质的⼆叉搜索树:它的左右⼦树都是AV树,且左右⼦树的⾼度差的绝对值不超过1。AVL树是⼀颗⾼度平衡搜索⼆叉树,通过控制⾼度差去控制平衡。

2024-10-10 16:50:32 818

原创 C++二叉搜索树

二叉搜索树的概念二叉搜索树中可以⽀持插⼊相等的值,也可以不支持插入相等的值,具体看使用场景定义总得来说二叉搜索树他的左子树和根还有右子树的值形成一个阶梯状。

2024-09-23 19:31:56 1289 1

原创 初识linux(2)

总得来说就是cp 后面跟一个 src文件地址,和一个dest文件地址。

2024-09-21 13:47:17 1020

原创 C++多态

多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为,我们把坐公交车的通常为person,student是由person继承下来的 ,person坐车全票,student坐车半价,old man坐车免费。

2024-09-14 22:51:46 10911 1

原创 初识linux(1)

1991年10月5日,赫尔辛基大学的一名研究生Linus Benedict Torvalds在一个Usenet新闻组(comp.os.minix)中宣布他编制出了一种类似UNIX的小操作系统,叫Linux。新的操作系统是受到另一个UNIX的小操作系统——Minix的启发,该系统是由一名叫Andrew S Tanenbaum的教师开发的。读者也许猜想所发布的这个系统应该是Linux的0.01版本,实际上不是这样。真正的Linux 0.01版本并没有被发布,原因是0.01版本不实用。

2024-08-28 13:54:56 968 1

原创 STL string的主要接口模拟实现

string通俗来说就是一个支持增删查改功能的字符串动态大小:string对象的大小可以在运行时动态改变,可以添加或删除字符而不用担心固定大小的限制。方便的操作:提供了大量成员函数来执行常见的字符串操作,如查找、替换、拼接等。安全性:string类处理了内存管理,减少了缓冲区溢出和内存泄漏的风险。兼容性:与C风格的字符串(以空字符’\0’结尾的字符数组)兼容。下面我们来说说模拟实现,首先看看构造函数。

2024-08-18 16:08:40 731

原创 STL vector主要接口模拟实现

vector可以理解为一个序列容器,可以改变任意大小的一个数组,他由start(指向数组的开始位置)finish(指向有元素存放的最后一个位置的下一个置),end_of_storage(容器总共的空间大小,这个指针指向vector当前分配的内存的末尾)特点: 动态数组:vector可以动态地增长或收缩,不需要在使用前指定大小。连续存储:vector在内存中分配连续的空间,这意味着可以通过指针算术快速访问元素。随机访问:由于存储是连续的,vector支持快速随机访问,即可以通过索引直接访问任何元素。

2024-08-16 13:01:29 869

原创 优先级队列的实现

优先级队列是一种特殊的数据结构,它类似于队列或栈,但是每个元素都关联有一个优先级或权重。在优先级队列中,元素的出队顺序不是简单地按照它们进入队列的先后顺序(先进先出,FIFO),而是根据元素的优先级来决定。具有最高优先级的元素最先出队,如果两个元素具有相同的优先级,则按照它们在队列中的顺序出队。这就是优先级队列。

2024-08-14 11:54:19 1014 2

原创 STL list的主要接口模拟实现

解成一个指针,用来对list进行操作,**最后一个用来定义list本身。下面我们看看代码。

2024-08-10 16:59:37 907

原创 C++内存管理

我们现在拿个日期类来举个例子。

2024-07-27 18:05:34 505

原创 C++类和对象(中)

下面我们来举例看看。

2024-07-22 22:40:56 726

原创 C++类和对象(上)

• class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的⽅法或者成员函数。• 为了区分成员变量,⼀般习惯上成员变量会加⼀个特殊标识,如成员变量前⾯或者后⾯加_ 或者 m开头,注意C++中这个并不是强制的,只是⼀些惯例,具体看公司的要求。• C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是。

2024-07-21 23:20:41 710

原创 初识C++(二)

引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间,它和它引⽤的变量共⽤同⼀块内存空间。⽐如:就像周树人和鲁迅是同一个人一样的道理引用的格式为**类型& 引⽤别名 = 引⽤对象;**这里和取地址用的同样的符号,用的时候要注意区分一下现在我们来举一个例子看看。

2024-07-10 16:27:59 1115

原创 初识C++

先是要访问作用域他的外围的作用域,在是这个作用域本身,然后是他里面要指定的元素,从外到内。

2024-07-09 15:14:42 1190

原创 数据机构--二叉树-堆

我们先来看一张树的图片,**树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。**把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继因此,树是递归定义的。树的结构就像这样,如果像下面这种非线性的数据结构,就不能被称作树形结构。

2024-05-18 18:47:25 653 1

原创 用队列实现栈

如果不知道什么是队列,什么是栈,可以先看看这篇文章。

2024-05-14 14:38:53 446 1

原创 数据结构--队列

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出 FIFO(First In First Out)入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头我们可以画图来看看。

2024-05-14 13:58:34 757

原创 设计循环队列-C语言实现

设计你的循环队列实现。循环队列是一种线性数据结构,其操作表现基于FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircularQueue(k): 构造器,设置队列长度为 k。Front: 从队首获取元素。如果队列为空,返回 -1。

2024-05-13 23:13:01 790

原创 数据结构--栈

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守LIFO(Last In First Out)的原则。后进先出的意思是,后进入的数据在出栈的时候最先出来栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。

2024-05-08 18:02:37 556 1

原创 牛客题-链表内区间反转

接下来就是反转链表了,p1就是反转链表的头节点我们要用一个while循环来控制p1当p1不等于要反转的区间的尾节点,这里个反转链表的思路是重点。这道题我们的思路是先找到要反转的区间的范围,在通过改变链表指针的指向来反转链表,在把反转链表的头节点和尾节点与原链表相连,我们来画图看看。这段代码就是判断特殊情况的,当prev为空的时候,就证明这个反转区间就是从链表头开始的,链表头节点就是反转链表的开始。接下来就是链接链表了,这时候我们反转完的头节点应该是p1我们就把我们存放的prev节点的下一个节点->p1。

2024-05-05 11:26:59 265 1

原创 关于链表带环问题为什么要用快慢指针

我们就拿走3步来说说,链表的长度为y我们假设长度为11,假设快指针和慢指针之间的距离长度为X,我们假设一个是7 ,快指针每次走3步,他们之间的距离就减去3,变成4,4在减去3,变成1,然后又减3变成-2,变成负数之后就相当于开始新一轮的追击了两个指针之间的距离就是,链表长度y-2就是9,9一直减去3就变成0,他们两个指针还是追上了。3,1,-1当到-1时他们又开始新一轮的追击然后他们之间的距离就变成链表长度-1变成10,是偶数,最终偶数-2就会变成0,他们两个追上了。如果链表无环,则返回 null。

2024-05-04 12:08:42 704 1

原创 经典链表oj题

下面画图来看看下面是代码。

2024-05-03 11:53:33 626

原创 C语言游戏实现——贪吃蛇

Windows 这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外, 它同时也是⼀个很⼤的服务中⼼,调⽤这个服务中⼼的各种服务(每⼀种服务就是⼀个函数),可以帮应⽤程序达到开启视窗、描绘图形、使⽤周边设备等⽬的,由于这些函数服务的对象是应⽤程序(Application), 所以便称之为 Application Programming Interface,简称 API 函数。WIN32 API也就Microsoft Windows32位平台的应⽤程序编程接⼝。

2024-04-23 15:44:25 1362 3

原创 C语言数据结构-双链表

我们根据名字来判断双链表有两个链,也就是两个指针,两个指针分别指向当前节点的下一个链表以及上一个链表,就像下面这张图。

2024-04-16 14:26:32 1000 1

原创 C语言单链表详解

总的来说顺序表的底层是数组,而链表的底层是指针也就是地址,数组在内存中是连续存放的,所以顺序表的随机访问性要比链表好,而链表是以地址的方式存放在内存中,有可能一个空间与另一个空间的地址离的非常远,以指针的形式进行访问,所以随机访问性比较差,一节动车组是由8节车厢组成,车厢与车厢之间不能编组,他们8节就是一个整体就像数组一样,而火车就不同了,火车车厢之间可以灵活编组,就像链表的各个节点一样。

2024-04-15 11:44:49 927 2

原创 C语言实现通讯录

我们需要使用C语言创建一个通讯录,要用通讯录具体实现存储联系人的地址,姓名,电话,性别,年龄要求我们要使用动态内存分配,通讯录存放了多少人就占多少个空间1.增加联系人2.删除联系人3.修改联系人4.查找联系人5.展示联系人。

2024-04-06 11:57:24 720 3

原创 C语言数据结构初阶-顺序表

顺序表是一种数据结构它使用计算机内存中的一组地址连续的存储单元来存储线性表的元素。这种存储方式使得线性表中逻辑上相邻的数据元素在物理存储位置上也相邻,通过这种方式,顺序表可以高效地执行插入、删除、查找等操作。顺序表的主要优点包括动态分配空间、支持随机访问元素,以及逻辑顺序与物理顺序的一致性。顺序表可以分为静态和动态两种形式,静态顺序表适用于元素数量固定的情形,而动态顺序表的大小可以根据需要调整。

2024-04-04 22:25:19 759 1

原创 C语言交换二进制位的奇数偶数位

我们要先把想要交换的数的二进制位给写出来假如交换13的二进制位,13的二进制位是然后写出偶数位的二进制数(偶数位是1的)然后写出奇数位的二进制数(奇数位是1的)最后把奇数位的二进制数,和偶数位的二进制数都和原来的数进行然后奇数位向>>1向右移动1位就挪到了偶数位,偶数位向<<1向左移一位就挪到了奇数位,最后两个移动完的二进制位按位或就得到了奇数偶数位互换,像这张图下面是代码为什么打印出来是反的,那是由于在VS2022下是小端字节序存储是倒着存放的0x5555555555555555就是奇数位。

2024-03-31 21:39:31 268 1

原创 C语言预处理详解

下面我们来讲一下define定义常量的基本语法5//把5替换成number# define stu student//这样把命名简化break;case//在写case时自动加上breakfor;;//更加形象化# define number 5 //把5替换成number # define stu student //这样把命名简化 # define CSAE break;case //在写case时自动加上break # define DO_FOREVER for(;;

2024-03-31 11:41:48 916

原创 C语言分支循环语句详解

在我们写程序的时候,总会遇到想一直循环执行某种语句的时候,这时候我们就要使用一种语句叫循环语句,或者带一些判断条件的语句,在C语言中提供了像这些的循环语句和分支语句。

2024-03-28 22:47:25 1185 3

空空如也

空空如也

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

TA关注的人

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