自定义博客皮肤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)
  • 收藏
  • 关注

原创 【无标题】

别的类的成员函数,要先创建对象再调用。静态函数调用,要写类域。有继承关系的直接调。

2025-09-27 18:16:04 76

原创 写Qt项目的收货(C++方面)

在写函数的定义时,一定要定义类域,(包了头文件也不行)不然编译器会以为这是一个全新的函数。声明时不需要带类域,只要函数的名字。

2025-09-23 10:33:16 116

原创 力扣复盘 之“移动零”

1、重写数组:取两个指针,其中一个遍历数组,找非0的元素,找到一个非0元素,计数器就++,同时把以计数器为下标的那个元素赋值成遍历到的那个非零元素。数组遍历完以后,非0元素的个数也统计出来了,剩下的就是0了。2.数组分区域处理:定义两个分界线指针。另一个(cur)作为已排列部分0和非0的分界。cur每遍历一个元素,进一次判断,决定放前面还是后面。cur遍历到最后一个元素结束。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。,编写一个函数将所有。

2025-09-16 13:37:13 174

原创 进程间通信

1、通信原理:两进程指向同一块文件描述符表,两进程得到的权限不同,当一个进程修改内容时,另一个进程能实时得到内容的更新。从而实现进程间通信。父进程先创建出管道,创建子进程时子进程继承管道,从而两进程指向同一块内存。两进程开放不同的权限,从而实现通信。3、进程池:父进程创建多个进程,通过管道进行连接,父进程通过不同的任务码,唤醒子进程,并控制子进程完成任务。进程通信的条件是两进程指向同一块内存资源。

2025-08-21 19:58:17 106

原创 动静态库

6、CPU里会有一个区域,该区域先存放程序的入口地址(虚拟地址),通过页表对照,找到物理地址,然后程序开始运行。静态链接就是多个文件使用就拷贝多次,加载到内存时会有大量重复代码,故静态链接出的文件体积会比动态链接的大很多。静态库是把文件直接拷贝到可执行程序里面,运行程序时就不需要再连接库。7、ELF是一种文件格式,库,.o文件,可执行文件都是这个格式。5、磁盘上的ELF文件编译完成后,不同区域的地址就已经是虚拟地址了。8、动态库就是把内存里共同的部分放到一起,所以动态库被多个进程共享。

2025-08-13 22:34:24 200

原创 文件相关

被打开的文件会被分配给一个进程,该文件的基础信息会被写到进程里面,操作系统通过管理进程,从而达到管理文件的目的。3、往文件里面写的内容会先放到文件内核缓冲区里面,再通过一些接口写到磁盘里面。缓冲区把要处理的文件集中打包,减少系统调用的次数,提高效率。没被打开的进程则储存在磁盘上。1、缓冲区存在的意义。

2025-08-11 15:56:34 121

原创 进程相关话题

即A进程先处理一部分,让后把当前结果和上下文以切片的方式保存到操作系统里(在里面建立一个结构体保存),再换上下一个进程。当输入一个命令时,父进程bash会先拿到,该命令会在bash里的命令行参数表里找,看自己要执行的是哪个分支;当操作系统检测到内存不足时,闲置的进程的代码和数据全部换入到磁盘里,进保留进程的PCB。环境变量一开始是写在配置文件里面,bash进程开始时在自己里面创建了环境变量表,把配置文件里的相关内容写进去,环境变量都是从父进程里面继承下来的。2、进程的代码数据怎么和PCB关联起来?

2025-08-06 16:50:04 198

原创 Linux(3)

这里就是用了绝对路径,所以压缩包里面除了目标文件,还带了一个路径。如果不想要这个路径,压缩时 -j 就行。2、压缩整个目录下面的所有文件: zip -r 压缩包名.zip 要压缩的目标文件(进入它的上一层)。1、压缩单个文件:zip 压缩包名.zip 要压缩的文件(每个文件之间用空格隔开)像这里打包的时候没有 -r ,就只打包了test目录,目录里的内容就没有进去。

2025-06-22 22:08:42 210

原创 Linux (2)

第一次没移成就是因为当前我在目录Linux里面,这里面只有别的子目录,没有file这个文件(虽然在子目录test里面,但是也不算)所以要移动的时候就要写清楚两个文件各自的路径。像我这里本来是想给file改名的,因为没有进到 file它对应的目录里面, 所以它理解成了在家目录里面新建一个文件,再把file的内容剪切进里面.....目录一定要把详细的路径写清楚,不能只出现一个目录名(除非目标路径是在该目录下的子目录)mv 文件名 目录的详细路径 (把文件剪切到后面的文件夹里面)

2025-06-20 21:52:09 205

原创 Linux基础

这里 -l -a 就是参数。命令 参数 路径 三者之间一定要用空格分开,同时不同的参数之间也要用空格分开。这个指令里面 cd就是命令,/usr/local/bin就是路径。如果文件不是在当前目录里,用 .. 回退到上级目录,直到目录里有该文件了再重复前面步骤。定位一个文件,可以用绝对路径(从根目录开始)也可以用绝对路径。:从当前目录的子目录开始一直到文件名结束,不可以直接写文件名。像 cd /usr/local/bin。目录:rm -r 目录名/二、绝对路径和相对路径。

2025-06-19 22:38:41 154

原创 leetcode复盘(1)

2、if (hash.find(要查找的值)!一般定义变量要定义在全局,也就是在函数刚刚开始就定义。if,while这种花括号里面就算一个局部作用域,在局部定义变量出了花括号定义的变量就会失效。find()在找不到结果的时候会返回end(),找到了就返回目标数据的地址。比如要创建一个字符,整型的组合:unordered_map<string,int> hash;hash[定义左边类型变量]=定义右边类型变量。:hash[目标对象]++/hash[目标对象]=修改值;

2025-06-15 21:45:29 276

原创 C++入门知识(1)

可以解决程序里面定义重名变量的问题namespace是一个命名空间。定义变量可以在4个域下面定义,全局域,局部域,命名空间域,类域。各个域之间是相互不影响的。命名空间里面的变量可以和外面的变量重名。

2024-09-11 13:08:20 399

原创 图论(2)

度统计的是一个节点上又多少条边度=出度+入度出度:统计以该节点为起始点箭头指向外面的边的条数入度:统计箭头指向该节点的边数度为1的节点为悬挂节点,边为悬挂边用矩阵计算节点的度。

2024-09-03 22:31:52 648

原创 图论(1)

离散数学

2024-09-03 13:46:26 1152

原创 离散数学------关系理论

离散数学

2024-09-01 20:21:40 759

原创 谓词和量词

离散数学

2024-08-29 20:27:05 402

原创 演绎法推理

离散数学

2024-08-29 10:52:53 356

原创 快排找基准值之挖坑法

把数组里第一个数据拿出来记为标准值,然后两边交替,从右往左找比基准值小的数据放到前面缺数据的坑里。放完后该位置也缺数据成为了新的坑,再把坑的下标移到新的位置。等到遍历到左右下标左>=右了就结束,最后数组里空下来的位置就放标准值。这样操作下来,比基准值小的数据全到左边,大的数据全到右边。从左到右找比基准值大的数据,后面同理。

2024-08-28 22:26:55 605

原创 命题的相关知识

离散数学

2024-08-27 21:54:30 373

原创 离散数学之集合论

离散数学知识分享

2024-08-27 15:36:28 1113

原创 快排里面找基准值的算法

比如上面这个情况left原来在7的位置,right在3的位置,走完之后都在9的位置,要是9和基准值换了之后就不符合排序的要求了。所以相等的时候继续进去,再走一轮right的位置就是基准值的位置了。当right走到超过left的时候,right里存着比基准值要小的数据,让right和基准值里面的数据交换位置,这个时候基准值左边都是小的数据,右边都是大的数据。:交换的时候要判断一下当前的right有没有走的超过right,因为有可能刚进循环的时候right没越界,但是循环完一次之后就越界了。

2024-08-26 16:06:03 928

原创 快速排序

2024-08-23 22:03:37 146

原创 直接选择排序

然后再找剩下的数据里面最大和最小的数据放到由剩下数据组成的开头和结尾,以此类推,直到找完。在最后一步我找到最大,最小值的位置之后,把最小值和begin位置的值进行交换------变成1 3 9。这个时候maxi和mini的位置没变,但是里面的值变了--------a【maxi】里面的值变成最小值1了。3、把mini标记的数据放到开头begin的位置,maxi标记的数据放到end的位置。2、遍历数组,找到数组里面的最大值和最小值,用maxi和mini标记下它们的位置。:当遇到下面这种特殊情况时。

2024-08-23 16:58:49 268

原创 希尔排序

希尔排序是将庞大的数据进行分组,通过定义一个gap值,将数组里面间隔为这个gap值的元素分在一个小组里面,把每个小组通过插入排序的方式分别排成有序。遍历完数组后再取新的gap值重新划分小组遍历数组,(预排序)直到最后这个gap值变成1就直接用插入排序。通过预排序可以将小数据放在前面,大数据放在后面,这样减少了最后插入排序的次数。在一组组排成有序的这个过程中,原来无序的数据会渐渐地变成有序。因为直接插入排序处理的数据越无序,它的时间复杂度就越高。这个过程比直接插入排序的效率更高。

2024-08-21 22:05:27 572

原创 直接插入排序

比如这里前面3个数已经通过排序排成了升序,现在要把6插到前面的有序数组里,于是我们比较6和有序数组里最后的一个元素(end)--也就是9的大小。不满足顺序,交换,再把end标志前移,继续比较,直到满足顺序,停止循环。针对一组乱序的数据,先在最开始两两进行比较,形成一个有序的数列,再把后面的数据和前面数组里有序的数据两两进行比较,插入到前面有序数列合适的部分。

2024-08-21 11:00:49 180

原创 链式结构二叉树的应用

将一棵二叉树分成根节点和它的左右子树,其左右子树又可以分成根节点和左右子树,运用函数递归的方式统计根节点的数量,将根节点的数量相加。比如这颗二叉树,1是根节点,size++,再算1的左子树和右子树的根节点,每颗子树又分成根节点和它的子树。这就是递归。只要根节点不为0,size就++,最后返回size的值。函数递归的时候下层函数运行结束后,下层函数栈就会销毁。下面不管怎么递归,下层函数size的值是没办法影响上层函数的。

2024-08-19 22:53:14 325

原创 二叉树的链式结构

常见的三种链式结构链式结构是通过链表的形式,将各个节点连接起来。每个节点里储存着三个值:储存的数据、左孩子节点的地址、右孩子节点的地址。所有的二叉树都可以用链式结构进行表示。而顺序结构只能表示完全二叉树由于其子树的结构和父母相同,所以可以通过函数递归的方式来创建链式结构常见的三种链式结构1、根左右先打印根节点的数据,再打印它的左子树,最后打印右子树。这是一棵子树的表示方法。每个节点的左右子树都按照这个方法表示,直到节点的左右节点都为NULL,停止递归。

2024-08-18 12:41:53 167

原创 数据结构之---堆(2)

出堆是指将堆顶数据出堆。出堆完成后要保证剩余数据还是满足原来堆的性质。所以我们把堆顶数据和堆底最后一个数据交换,取出新堆底数据,之后通过向下调整算法将剩下的数据重新排列成一个堆。大堆经过出堆操作得出的数据是升序的小堆经过出堆操作得出的数据是降序的。

2024-08-15 23:11:27 705

原创 传值和传地址

传值是把实参里的数据复制了一份放到形参里,但是实参地址和形参是不一样的,所以改变形参是无法改变实参的。传值的话就只改变了形参sl,实参s还是没有改变,这里因为s没有初始化,所以传不了数据会报错。比如这里我定义了一个结构体,想要改结构体里面的数据,这时候就要传地址。传地址时实参和形参是同一个地址,所以改变形参可以改变实参。

2024-08-15 11:39:09 274

原创 数据结构之----堆

堆是一棵完全二叉树。堆又分为大堆,小堆两种结构。:所有的父节点都比它的子节点要大。:所有的父节点都比它的子节点要小。

2024-08-14 14:54:49 299

原创 二叉树相关知识

三、满二叉树的计算公式1、总结点数=2^总层数 -12、第i层的节点数=2^(i-1)四、完全二叉树可以用数组来储存完全二叉树的数据。普通的二叉树一般不用数组来储存,会造成空间的浪费将完全二叉树的数据放入数组后产生的公式:数组元素为i的元素:1、双亲节点=(i-1)/22、左孩子节点=2*i+13、右孩子节点=2*i+2。

2024-08-12 15:00:37 275

原创 数据结构之链表(2)

找到最后一个节点;释放这个节点的内存;将倒数第二个节点里面存的地址改成NULL。

2024-07-27 22:04:31 298

原创 数据结构之链表

链表里面里包含了下一个节点的地址最后一个节点里面储存的地址是NULL下面介绍链表的几种常用功能。

2024-07-27 20:41:32 174

原创 三目操作符的规则

条件(capa==0)为真,故执行?后面的表达式,输出的结果也就是4。条件为假,故执行(2*4*capa) ,运算结果就是8。

2024-07-19 11:24:27 213

原创 数据在内存中的存储

也就是跳过了01,往后移动到了02。VS里面采用的是小端字节序,所以结果是02 00 00 00。1.一个16进制数占4个比特位,所以2个16进制数就是一个字节,所以这里跳过一个字节跳过2个数。2、每个内存单元的大小都是一个字节,相邻的内存单元之间差一个字节。让我们一起来看看上面这个代码,它的运行结果是多少呢。

2024-07-12 20:47:43 236

原创 常见函数介绍

记存放字符串的数组为arr字符串里面分隔符的集合为sep则函数写为。

2024-07-09 15:00:33 431

原创 常用的字符函数介绍

比如这给代码,意思是把arr1里面的内容存到arr里面那么一开始arr1里面是这样的从a~'\0'arr1 数据存进arr里面就是直接覆盖 ,从头开始,并不会从'\0' 后面覆盖。下面就是覆盖以后的结果注意:要存的数据一定要以 '\0' 结尾,不然会出现这样的情况printf函数只打印第一个出现的 \0 前面的内容。

2024-07-06 14:41:29 493

原创 strlen函数和sizeof操作符的用法

这里的char*c[]里面放的是数组里面各个字符串首元素的地址。char*[]其实本质上是一个二维数组, c里面的元素都是字符数组的地址。因为cp指向的是c里面的元素,三个字符数组的地址,所以后面做加法是跳过的是一整个数组(字符串)不是单个的字符。同理cpp就是一个三级指针。cp里面放的是地址的地址。

2024-07-01 23:11:41 578

原创 一个简易的计算器程序

函数的返回类型 + (* 数组名【元素个数】)+ (函数形参)不过函数指针数组的数组名要从后面移到括号里面的 * 的后面。比如返回值是int类型,函数的参数也是int类型的函数可以写成。我们定义数组的时候都是在数组元素类型后面加上数组名的。int(*p)(int) p是函数指针变量。一个简单的计数器应该包括加减乘除这四个功能。元素类型就是里面的元素去掉参数名剩下的部分。顾名思义是一个可以放函数地址的。的函数指针数组应该写成。函数的指针就是函数名。

2024-06-28 14:12:57 436

原创 关于指针的知识(2)

一维数组传参其实传的是首元素的地址。比如说上面这个函数,它接收的其实是数组首元素的地址,而不是整个数组。所以sizeof(arr)其实是首元素的大小。所以如果把数组传参给函数,那么在函数里面是算不出这个数组的长度的。二、指针数组指针数组是数组,里面的元素是指针。比如数组里面有5个元素都是整型指针,那么这个指针数组写成二维数组arr里面有3个元素{arr1,arr2,arr3},那么arr这个数组名是arr1的地址,arr1这个数组名是arr1里面首元素的地址。

2024-06-26 22:41:32 261

空空如也

空空如也

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

TA关注的人

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