自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [linux] makefile&&gdb理解

3. 如果code文件不存在,或是code所依赖的后面的code.o文件的文件修改时间要比code这个文件新(可以用 touch 测试),那么,他就会执行后面所定义的命令来生成code这个文件。5. 当然,你的C文件和H文件是存在的啦,于是make会生成 code.o 文件,然后再用 code.o 文件声明 make的终极任务,也就是执行文件code了。2. 如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“code”这个文件, 并把这个文件作为最终的目标文件。

2024-06-08 10:58:10 786

原创 [Linux]第一个小程序-进度条

我们在运行的时候会发现两段代码第一段 字符串先出来然后休眠三秒,第二段先休眠三秒再打印字符串。缓冲区:内存空间,我们先这么理解,后面深入学习的时候我们再具体学习。我们c语言在程序运行的时候会为我们默认打开三个标准的输入输出流。flush stream 特定的文件流的数据进行刷新。linux下一切皆文件,显示器自然也可以当一个文件来看待。程序结束的时候,一般要自动冲刷缓冲区。在我sleep期间,字符串在哪里?缓冲区满了,自动刷新,暂时不考虑。\n,\n之前的字符串立即刷新。换行:回到最新的一行。

2024-05-27 09:12:39 324

原创 【linux】g++/gcc编译器

我们在ubuntu里可以直接执行生成静态链接,但是在centos里可能会出现系统中没用静态库,导致静态链接失败的问题。在我们使用软件的时候我们会发现有不同的版本,有了条件编译,我们就可以只需要对一份代码跟据不同的功能条件编译进行动态裁剪,这样我们就仅仅需要一份代码就可以实现不同的功能。LDD用来打印或者查看程序运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题。我们能看到我们的指令大部分都是采用动态链接的,所以一但动态库出现问题那么所有的指令都会出现问题。为什么要有库这个概念呢?

2024-05-22 11:16:37 1777

原创 【linux】yum&&vim工具理解使用

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

2024-05-15 16:39:46 1844

原创 【c++】string深度刨析以及实现

这种设计也是有一定道理的,大多数情况下字符串的长度都小于16,那string对象创建好之后,内 部已经有了16个字符数组的固定空间,不需要通过堆创建,效率高。注意:下述结构是在32位平台下进行验证,32位平台下指针占4个字节。检查引用计数,如果等于1,说明资源是自己独占的,不用拷贝。不是每个对象都会修改,拷贝后不修改就赚。故总共占16+4+4+4=28个字节。如果大于1,先拷贝再写,这就是写时拷贝。指向堆空间的指针,用来存储字符串。最后:还有一个指针做一些其他事情。反正都要拷贝,意义是什么?

2024-05-11 10:59:21 367

原创 【c++】----STL简介&&string

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

2024-04-28 22:09:02 946

原创 【linux】权限的概念

我们操作windows 不是直接操作windows内核,而是通过图形接口,点击,从而完成我们的操作(比如进入D盘的操作,我们通常是双击D盘盘符.或者运行起来一个应用程序)。c: 字符设备文件:在我们c语言中使用printf(“%d”,123),向显示器打印的时候是显示字符‘1’,‘2’,‘3’,还是123数字呢。,有相同的作用,主要是对我们的指令进行解析,解析指令给Linux内核。vip,门禁,就是通过一定的条件,拦住一部份人,给另一部分人的权力,来访问某种资源 有无 或者能还是不能的问题。

2024-04-28 22:03:25 782

原创 【Liunx】常见指令

cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录, 则它会把前面指定的所有文件或目录复制到此目录中。1.指令的本质都是程序 ---- 指令,程序,可执行程序都是一回事 指令就是程序----那安装和卸载是在干什么呢?我们发现,当我们可以多创建几个显示,我们发现,当创建其他显示的时候,多出了文件2号,当我们输出重定向的时候,我们会发现把数据打印到2号显示里了。功能:touch命令参数可更改目录或目录的时间日期,包括存取时间,或者新建一个不存在的文件。

2024-04-08 12:34:02 720 1

原创 【c/c++】内存管理

如果申请的是内置类型的空间,new和malloc,delete和free基本类似,不同的地方是: new/delete申请和释放的是单个元素的空间,new[]和delete[]申请的是连续空间,而且new在申 请空间失败时会抛异常,malloc会返回NULL。,如果 malloc申请空间成功就直接返回,否则执行用户提供的空间不足应对措施,如果用户提供该措施 就继续申请,否则就抛异常。注意:在申请自定义类型的空间时,new会调用构造函数,delete会调用析构函数,而malloc与 free不会。

2024-03-28 15:52:37 789

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

如果想要让计算机认识现 实生活中的实体,用户必须通过某种面向对象的语言,对实体进行描述,然后通过编写程序,创 建对象后计算机才可以认识。友元函数可以直接访问类的私有成员,它是定义在类外部的普通函数,不属于任何类,但需要在 类的内部声明,声明时需要加friend关键字。内部类是一个独立的类, 它不属于外部类,更不能通过外部类的对象去访问内部类的成员。,参见友元类的定义,内部类可以通过外部类的对象参数来访 问外部类中的所有成员。友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。

2024-03-18 14:48:58 881

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

在这个程序中,我们调试时会发现在进入func1函数时(传值传参,将d1拷贝给d),会先进入他的拷贝构造函数,构造完成后才会进入函数,那怎么解决这个问题呢?如果我们再稍微不小心将程序写反了,那么会发现的d1和d2居然指向同一块空间了,一旦发生修改都被修改了,原因我们在这里传的是引用,在于d是d1的别名。编译器容易把握不住,如果我们在实现比如栈的时候,我们如果只进行,浅拷贝的话,会导致两个对象指向一块空间,会导致野指针,同一块空间被释放两次。并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。

2024-03-15 11:39:49 947 3

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

比如:对于电脑这样一个复杂的设备,提供给用户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日常事务。缺陷:每个对象中成员变量是不同的,但是调用同一份函数,如果按照此种方式存储,当一 个类创建多个对象时,每个对象中都会保存一份代码,相同代码保存多次,浪费空间。对于计算机使用者而言,不用关心内部核心部件,比如主板上线路是如何布局的,CPU内部是如何设计的等,用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。,类的所有成员都在类的作用域中。

2024-03-04 18:44:57 641 5

原创 【c++】 入门

需要使用到namespace关键字,

2024-01-28 17:50:38 822 4

原创 二叉树链式结构的实现

简单构建一颗二叉树在学习二叉树的基本操作前,,然后才能学习其相关的基本操作。由于现在我们对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。注意:上述代码并不是创建二叉树的方式,真正创建二叉树方式后序详解重点讲解。

2024-01-27 14:40:18 794 1

原创 TopK问题

TopK

2024-01-24 17:19:09 502 6

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

下面我们给出一个数组,这个数组逻辑上可以看做一颗完全二叉树,但是还不是一个堆,现在我们通过算法,把它构建成一个堆。这里我们从倒数的第一个非叶子节点的 子树开始调整,一直调整到根节点的树,就可以调整成堆。在堆里删除一个Pop掉一个数是将根节点Pop掉,我们在这里如果直接Pop掉的话,会打乱整个堆的结构,所以我们将根节点与最后一个节点交换,交换后再Pop掉,然后我们再通过根节点开始的向下调整算法把他调整成为一个小堆。i = 0,1, 2…将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。

2024-01-23 17:11:50 1605 3

原创 树的概念即结构

通常的方法是 链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所 在的链结点的存储地址。对于深度为K 的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对 应时称之为完全二叉树。4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=log2(n+1) . (ps: log2(n+1)是log以2 为底,n+1为对数)2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2^h-1.如上图:A是B的父节点。

2024-01-18 11:45:23 819 3

原创 c语言队列的实现

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

2024-01-18 10:39:55 402 2

原创 c语言实现栈

初始化栈的时候top初始化可以为0,但容易出现歧义,所以我们可以将top初始化为-1,只需要将push内的top换一下位置就行。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构更优一些。栈分为定长的静态栈和支持动态增长的栈,静态栈一般不实用,所以我们主要实现下面的支持动态增长的栈。栈一种特殊的线性表,其允许在固定的一端进行插入和删除的元素操作。压栈:栈的插入操作叫做进栈/压栈/入栈。入数据在栈顶:Pop。我们实现的栈是数据结构中的一种结构,和操作系统中的栈无关。栈中的数据元素遵循后进先出的原则。

2024-01-18 10:24:52 401 1

原创 链表带环问题及其扩展问题

当慢指针刚 进环时,可能就和快指针相遇了,最差情况下两个指针之间的距离刚好就是环的长度。此时,两个指针每移动一次,之间的距离就缩小一步,,因此:在满指针走到一圈之前,快指针肯定是可以追上慢指针的,即相遇。: 让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环 运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。,即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置同时开始运行,如果链表带环则一定会在链表中相遇,否则快指针率先走到链表末尾。

2024-01-17 19:59:57 411

原创 链表的实现

物理连续,支持下标的随机访问,适合尾插,尾删,元素高效存储+频繁访问。2.空间不够扩容,扩容有一定的消耗,且可能存在一定的空间浪费。上一篇我们已经实现了无头单向非循环链表,下面我们来实现。1.头插,中间插入,删除效率低,需要挪动数据O(N)2.按需申请释放,合理利用空间,不存在浪费。1.任意位置的插入删除都是O(1)。随机访问不方便O(N)。

2024-01-17 16:48:20 405

原创 c语言链表的实现

一般用在单独的存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然复杂,但是使用代码实现后会发现结构带来很多优势,实现反而简单,下篇我们实现代码就知道了。概念:链表是一个物理上非连续存储,非顺序的数据结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。,如哈希桶,图的邻接图等等。另外这种数据结构在笔试面试中出现的很多。,一般来说不会单独用来存放数据。

2024-01-17 16:31:52 379

原创 顺序表的实现

静态顺序表只适用于确定知道需要多少数据的场景。静态顺序表的定长数组导致N(数组长度)定大了,空间开多了浪费,开小了不够用。所以现实基本都是使用动态的顺序表,根据需要动态开辟空间大小,我们在下面以工程的方式实现。顺序表是一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。//越界一定会报错么?

2024-01-17 16:06:10 401

原创 指针和数组笔试题解析

1. sizeof(数组名),这里的数组名表示整个数组,sizeof(数组名)计算的是整个数组的大小,单位是字节。2. &数组名,这里的数组名表示整个数组,&数组名取出的是数组的地址。统计的是在字符串中\0之前出现的字符的个数。strlen 求字符串长度。数组名是数组首元素的地址。

2023-12-08 17:51:02 55

原创 qsort函数的使用

当然qsort函数是可以进行任意类型排序的,只需要将比较函数大小的函数进行改变就可以实现。1.首先回忆一下冒泡排序算法,对数据进行升序 冒泡排序的思想,两两相邻的元素进行比较。compar 函数指针 cmp指向了一个函数,这个函数是比较两个函数大小的。void *类型的指针 不能进行解引用操作,也不能进行+ - 整数的操作。的方式,对数据进行排序 这个函数可以直接使用 这个函数可以用来排序。void *类型的指针 是用来存放任意类型数据的地址。演示qsort函数的使用 回调函数的案列。

2023-10-26 12:17:28 61 1

空空如也

空空如也

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

TA关注的人

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