自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux操作系统中对于进程的概念

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

2024-07-10 00:51:02 778

原创 Linux调试器-gdb使用以及Linux项目自动化构建工具-make/Makefile

make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。像clean这种,没有被第一个目标文件直接或间接关联,那么它后面所定义的命令将不会被自动执行,

2024-07-10 00:33:30 918

原创 Linux编译器-gcc/g++使用

最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序.

2024-07-10 00:27:30 580

原创 C++容器之List

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

2024-05-09 22:01:53 293

原创 C++容器之vector类

vector是表示可变大小数组的序列容器。就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自动处理。本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是。

2024-05-09 21:52:44 434

原创 C++容器之string类

C语言中,字符串是以’\0’结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问.在构造时,将资源的计数给成1,每增加一个对象使用该资源,就给计数增加1,当某个对象被销毁时,先给该计数减1,然后再检查是否需要释放资源,如果计数为1,说明该。注意:resize在改变元素个数时,如果是将元素个数增多,可能会改变底层容量的大小,如果是将元素个数减少,底层空间总大小不变。

2024-04-28 22:53:23 1012

原创 C++STL简介

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

2024-04-28 22:32:21 185

原创 Linux环境基础开发工具yum,vim使用

在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系.

2024-03-24 21:19:55 617

原创 离散化算法,以Acwing802.区间和为例子(C++实现)

由于数轴是无限长的,所以我们无法直接使用前缀和算法来解题,但换种思路,该题的难点就在于由于数轴无限长所以限制了我们利用前缀和,所以我们可以换种思路,由于n和m都在10的五次方内,所以,此题给出的坐标数量最多不超过3*10的五次方个,我们就可以由这个数目将每个坐标进行映射,然后就可以使用前缀和来求解,离散化就是把大而分散的一段段使用到的稀疏区间,整合映射到连续的一段较小的稠密区间里,然后就可以通过普通前缀和公式来计算连续一段的区间和,本质上就是化大为小,把稀疏离散化简为稠密连续的一段。

2024-03-13 22:24:32 360 1

原创 C++模板基本概念

class 类模板名// 类内成员定义// 动态顺序表// 注意:Vector不是具体的类,是编译器根据被实例化的类型生成具体类的模具public :, _size(0){}// 使用析构函数演示:在类中声明,在类外定义。~Vector();// 注意:类模板中函数放在类外进行定义时,需要加模板参数列表if(_pData)

2024-02-06 11:45:05 911

原创 C/C++内存管理

int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;

2024-02-05 16:59:50 1859

原创 C++类和对象补充篇

在类和对象阶段,大家一定要体会到,类是对某一类实体(对象)来进行描述的,描述该对象具有那些属性,那些方法,描述完成后就形成了一种新的自定义类型,才用该自定义类型就可以实例化具体的对象。内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去访问内部类的成员。注意:内部类就是外部类的友元类,参见友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在类的内部声明,声明时需要加friend关键字.

2024-02-04 20:30:11 785

原创 C++类和对象之进击篇

此时用户再在类外自己实现一个全局的赋值运算符重载,就和编译器在类中生成的默认赋值运算符重载冲突了,故赋值运算符重载只能是类的成员函数。3. 用户没有显式实现时,编译器会生成一个默认赋值运算符重载,以值的方式逐字节拷贝。将const修饰的“成员函数”称之为const成员函数,const修饰类成员函数,实际修饰该成员函数隐含的this指针,表明在该成员函数中不能对类的任何成员进行修改。注意:在编译器生成的默认拷贝构造函数中,内置类型是按照字节方式直接拷贝的,而自定义类型是调用其拷贝构造函数完成拷贝的。

2024-02-01 21:24:38 553

原创 C++初识类和对象

/ 类体:由成员函数和成员变量组成// 一定要注意后面的分号class为定义类的关键字,ClassName为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数。声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。类声明放在.h文件中,成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::一般情况下,更期望采用第二种方式。

2024-01-27 20:58:53 1159

原创 Linux权限的概念,shell命令以及运行原理

目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。

2024-01-27 20:39:50 796

原创 Linux的几个常用基本指令2

cal命令可以用来显示公历(阳历)日历。less与more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件。head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块, head 用来显示档案的。less 工具也是对文件或其它输出进行分页显示的工具,应该说是linux正统查看文件内容的工具,功能极其强大。-a或–all 详细输出所有信息,依次为内核名称,主机名,内核版本号,内核版本,硬件名,处理器类。

2024-01-27 20:24:49 1156

原创 C++入门篇章2(C++是如何解决C语言不能解决的问题的)

在早期C/C++中auto的含义是:使用auto修饰的变量,是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它,为什么?C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得return 10;auto b = a;//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化return 0;【注意】

2024-01-25 11:32:02 1077

原创 C++入门篇章1(C++是如何解决C语言不能解决的问题的)

定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。// 1. 正常的命名空间定义// 命名空间中可以定义变量/函数/类型int val;//2. 命名空间可以嵌套int a;int b;int c;int d;//3. 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。// ps:一个工程中的test.h和上面test.cpp中两个N1会被合并成一个// test.h。

2024-01-24 20:02:58 951

原创 排序的概念以及几种基本常用排序

将已有序的子序列合并,得到完全有序的序列;若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换在剩余的array[i]–array[n-2](array[i+1]–array[n-1])集合中,重复上述步骤,直到集合剩余1个元素。序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次。

2024-01-16 15:37:45 1649 1

原创 力扣 145. 二叉树的后序遍历

与前序,中序相同,将树的值存到数组中,所以在申请空间的时候,我们需要知道要申请多少空间,也就是要知道树到底有多少个结点,因此第一步要写个函数实现获得树的节点数,又因为该题提供的接口里写了申请空间,因为本题自带的接口不适合递归,所以我们可以将递归操作再另外写个函数来实现,在遍历的时候遵循后序.结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

2023-12-11 22:50:19 700 2

原创 力扣94. 二叉树的中序遍历

与前序遍历相同,相同的思路,将树的值存到数组中,所以在申请空间的时候,我们需要知道要申请多少空间,也就是要知道树到底有多少个结点,因此第一步要写个函数实现获得树的节点数,又因为该题提供的接口里写了申请空间,因为本题自带的接口不适合递归,所以我们可以将递归操作再另外写个函数来实现只不过在遍历的时候要遵循中序。

2023-12-11 22:48:25 106

原创 力扣101.对称二叉树

由于题中的接口只给了一个参数,因此如果我们使用题中给的接口做出递归就会很难,因此我们可以再给一个有着两个参数的接口,这样,对于左右子树的判断也会变得更加便利,然后,对于左右子树的判断,左子树的左子树要与右子树的右子树相同,左子树的右子树要与右子树的左子树相同,根据这个原理判断即可.结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

2023-12-10 22:17:09 170 1

原创 牛客网 KY11 二叉树遍历

该题需要提供两个接口,一个是根据前序构造二叉树的接口,一个是中序遍历接口。因为’#‘就代表空,所以如果遇到’#'时,直接返回即可.

2023-12-01 12:33:14 254 1

原创 力扣 572. 另一棵树的子树

首先先要有一个判断根据两个根节点判断两个树是否相等的接口,然后再利用递归,在需要被比较的树里进行前序遍历来得出是否有子树.结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

2023-12-01 11:08:37 145

原创 力扣 226.反转二叉树

该题思路很简单,就是利用递归,将每次的root结点的左右树相互交换即可,最后再返回root结点.结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

2023-11-29 22:52:30 272

原创 力扣 144.二叉树的前序遍历

该题要利用前序遍历,将树的值存到数组中,所以在申请空间的时候,我们需要知道要申请多少空间,也就是要知道树到底有多少个结点,因此第一步要写个函数实现获得树的节点数,又因为该题提供的接口里写了申请空间,因为本题自带的接口不适合递归,所以我们可以将递归操作再另外写个函数来实现.2.2递归接口:2.3最终实现结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

2023-11-29 22:38:30 219

原创 文件中找TopK问题

我们可以根据K的不同,建立不同大小的堆,加入要找前K个值,那么我们就建立大小为K的小堆,建堆又有两种方式,即向上调整法和向下调整法,在之前的文章中我证明了向上调整法的时间复杂度是O(N*logN)而向下调整法的时间复杂度是O(N),因此如果追求时间复杂的的话,向下调整法会更好。

2023-11-29 12:59:55 501

原创 二叉树之推排序(升序)

首先,如果要完成升序,那我们可以建立一个大堆,因为大堆可以选出一个最大的值放在堆的最上面,我们就可以根据每次选出一个最大值来进行排序的做法.值得一说的是,如果给定一个数组,让进行建堆排序操作的话,建立大堆可以有两种不同的过程,两种过程对应了不同的时间复杂度。与向上调整法不同的是,向下调整法开始的第一个节点是最后一个非叶子节点。

2023-11-28 23:04:25 409

原创 力扣 965. 单值二叉树

如果一个结点的子节点与其相同,那么就沿着子节点进行遍历.

2023-11-27 23:12:47 208

原创 力扣100. 相同的树

可以使用递归遍历的方法,只要有一条边的值不相同则就返回false,如果到头了就返回true.并且在最后做出判断,如果对应的左子树和右子树都相同,那就返回true,但凡一边有不同的就返回false.结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

2023-11-27 23:10:21 219

原创 力扣104. 二叉树的最大深度

如果我们知道了左子树和右子树的最大深度,那么该二叉树的最大深度即为大的深度加一,而左子树和右子树的最大深度又可以以同样的方式进行计算。因此我们可以用「深度优先搜索」的方法来计算二叉树的最大深度。

2023-11-27 23:04:39 347

原创 二叉树的实现(纯C语言版)

/ 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树。// 判断二叉树是否是完全二叉树。// 二叉树查找值为x的节点。// 二叉树第k层节点个数。// 二叉树叶子节点个数。// 二叉树节点个数。// 二叉树前序遍历。// 二叉树中序遍历。// 二叉树后序遍历。

2023-11-27 21:35:23 463

原创 二叉树的顺序结构及实现

普通的二叉树是不适合用数组来存储的,因为可能会存在大量的空间浪费。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储,需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事,一个是数据结构,一个是操作系统中管理内存的一块区域分段。如果有一个关键码的集合K = { , , ,…, },把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足: <= 且 <= ( >= 且 >= ) i = 0,1,将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。

2023-11-24 00:14:59 178 1

原创 力扣 622.设计循环队列

首先,该题是设计循环队列,因此我们有两种实现方法,即数组和链表,但具体考虑后,发现数组实现要更容易一些,因此使用数组实现,因此我们要给出头和尾变量,个数变量以及一个数组,利用取模运算来达到想要的效果,要特别注意的是,为了方便个数的统计以及在判断队列是否为满方便一些,因此在开辟空间的时候直接多开辟一块,即有效空间为K,而实际开辟空间为K+1.结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

2023-11-21 20:35:49 554

原创 线性表的概念

线性表在逻辑上是线性结构,也就说是连续的一条直线。因为二叉树是树形结构,在逻辑上并不是逻辑上是线性结构,因此此题目选C.

2023-11-17 23:06:29 909

原创 Linux的几个常用基本指令

若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息。功能: touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间,或者新建一个不存在的文件。说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,功能:对于目录,该命令列出该目录下的所有子目录与文件。首先在Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件.-f 或 --force 强行复制文件或目录, 不论目的文件或目录是否已经存在。

2023-11-17 22:18:12 641

原创 力扣 232. 用栈实现队列(C语言实现)

利用两个栈,设栈s1为入栈,s2为出栈,则当s2为空时,出队列只能将s1的后N-1项挪到s2后剩下的就为出栈的项,但如果s2不为空那就说明此时s2栈中的元素就已经是按照队列的顺序排好了,直接出栈即可.栈的实现代码:解题代码:结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!

2023-11-14 21:53:34 108

原创 力扣 225. 用队列实现栈(C语言实现)

这道题如果使用C++会好写的多,因为可以使用C++提供的队列来实现,但如果使用C语言则必须手写一个队列来实现,在这里我用了我前面文章中实现好的队列来解答,首先因为队列是先进先出,而栈是后进后出,因此我们可以设计两个队列,其中一个队列放数据,另一个队列为空。当使用POP接口出栈时,则可将队列一的前N-1个数据挪到队列二上,这样一来,队列一剩余的那个数就为要出栈的数。即这道题的精髓就是两个队列之间数据的传递.

2023-11-14 20:00:56 271

原创 数据结构 队列(C语言实现)

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾 出队列:进行删除操作的一端称为队头。队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。

2023-11-12 23:43:34 1279 1

原创 数据结构 栈(C语言实现)

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

2023-11-12 23:42:58 330

空空如也

空空如也

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

TA关注的人

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