- 博客(24)
- 收藏
- 关注
原创 C++实现AVL树
上上节我们学习了二叉搜索树,他的理想查找的时间复杂度是o(log n),但是如果是下面这种情况,那么它的时间复杂度就会变成o(n).这种情况就是出现一边高的那种,它的个数和它的高度相差不大。那么这样就会把二叉搜索树的优势给丢了,效率也是大打折扣,所以后面发明了一个用来平衡左右高度的树,AVL树。
2025-04-06 16:56:17
581
原创 C++ --- map和set的使用
• set的声明如下,T就是set底层关键字的类型。• set默认要求T⽀持⼩于⽐较,如果不⽀持或者想按⾃⼰的需求⾛可以⾃⾏实现仿函数传给第⼆个模版参数• set底层存储数据的内存是从空间配置器申请的,如果需要可以⾃⼰实现内存池,传给第三个参 数。• ⼀般情况下,我们都不需要传后两个模版参数。• set底层是⽤红⿊树实现,增删查效率是O(logN) ,迭代器遍历是⾛的搜索树的中序,所以是有序的。
2025-04-01 15:08:46
953
原创 C++ --- 二叉搜索树
⼆叉搜索树⼜称⼆叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树:1 若它的左⼦树不为空,则左⼦树上所有结点的值都⼩于等于根结点的值2 若它的右⼦树不为空,则右⼦树上所有结点的值都⼤于等于根结点的值3 它的左右⼦树也分别为⼆叉搜索树4 ⼆叉搜索树中可以⽀持插⼊相等的值,也可以不⽀持插⼊相等的值,具体看使⽤场景定义。
2025-03-26 21:55:32
894
原创 C++ --- 多态
多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。⽐如Student继承了 Person。Person对象买票全价,Student对象优惠买票在虚函数的后⾯写上=0,则这个函数为纯虚函数,纯虚函数不需要定义实现(实现没啥意义因为要被 派⽣类重写,但是语法上可以实现),只要声明即可。包含纯虚函数的类叫做抽象类,抽象类不能实例 化出对象,如果派⽣类继承后不重写纯虚函数,那么派⽣类也是抽象类。纯虚函数某种程度上强制了 派⽣类重写虚函数,因为不重写实例化不出对象。
2025-03-22 22:33:17
1103
原创 Linux 权限的概念
Linux下有两种用户:超级用户(root)、普通用户。超级⽤⼾:可以再linux系统下做任何事情,不受限制普通⽤⼾:在linux下做有限的事情。超级⽤⼾的命令提⽰符是“#”,普通⽤⼾的命令提⽰符是“$”。su [⽤⼾名]:切换⽤⼾。例如,要从root⽤⼾切换到普通⽤⼾user,则使⽤ su user。要从普通⽤⼾user切换到root⽤⼾则使⽤ su root(root可以省略),此时系统会提⽰输⼊root⽤⼾的⼝令。
2025-03-19 18:15:31
524
原创 C++——继承
通过上面的案例,那么就很好理解了下⾯我们看到Person是基类,也称作⽗类。Student是派⽣类,也称作⼦类。(因为翻译的原因,所以既叫基类/派⽣类,也叫⽗类/⼦类)这里好像发现继承访问限定符和访问限定符都是一样的三个,那他们有什么关系呢?1.基类private成员在派⽣类中⽆论以什么⽅式继承都是不可见的。这⾥的不可见是指基类的私有成员还是被继承到了派⽣类对象中,但是语法上限制派⽣类对象不管在类⾥⾯还是类外⾯都不能去访问它。2.
2025-03-14 22:46:03
601
原创 C ++ 实现优先队列
由上面可以知道,优先队列里面的参数有三个,第一个很好理解就是我们要传的数据类型,第二个是传相对应的适配器,适配器其实是可以手动更改的,但是其实我们也就可以用它最基本的vector来实现,第三个参数是我们的仿函数,仿函数在这一节还是挺重要的,在这里先放着,在后面会详细的说。在这里先将全部的代码给放出来,一遍后面好讲解。
2025-03-08 20:37:04
296
原创 Linux基本指令(2)
cat [选项] [⽂件: 查看⽬标⽂件的内容如图是一个file.txt文件,那么拿这个作为参考,来说明下面这三个命令-b是对非空输出行编号-n 是对输出的所有行编号-s是不输出多行的空行。
2025-02-21 13:53:11
667
原创 Linux的基础指令
ls [选项] [⽬录或⽂件(在【】里面的选项可以不写):对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。常⽤选项:-a 列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。-d 将⽬录像⽂件⼀样显⽰,⽽不是显⽰其下的⽂件。如:ls ‒d 指定⽬录-i 输出⽂件的 i 节点的索引信息。如 ls ‒ai 指定⽂件-k 以 k 字节的形式表⽰⽂件的⼤⼩。ls ‒alk 指定⽂件-l 列出⽂件的详细信息-n ⽤数字的 UID,GID 代替名称。
2025-02-19 18:53:23
599
原创 C++中const成员函数
为什么d1<d2没有问题,而d2<d1却有问题了呢?首先对于第一个比较来说d1和d2都是权限的保持接着对于第二个比较来说d1传递过去是权限的缩小,本来是可以修改了,现在不能修改;d2传递过去就变成了【权限的放大】,原本的d2是const,但是this指针并没有加[const]做修饰,所以就造成了【权限方法】的问题既然这样我们该如何去做一个修改呢?此时就可以用到我们上面说的const来达到目的,依旧是在函数后面加一个const修饰就可以了class Datepublic://构造函数。
2025-02-16 18:22:41
581
原创 C++ 实现string类
一般来说,我们写的成员函数都是public类型的,这样能在外部调用到,一般类的内置成员变量都是private的,不能允许外界随便改变它public://写你的成员函数private://首先,string类是一个字符串,那么我们先要有一个char*类型的指针,还有记录它大小的_size,和一个记录它空间的_capacity,由此来看,string的初步创建就是这样。
2025-02-16 10:50:03
522
原创 C++内联函数(详解)
一 引入inline关键字的 原因一 引入inline关键字的 原因函数是一个可以重复使用的代码块,CPU 会一条一条地挨着执行其中的代码。CPU 在执行主调函数代码时如果遇到了被调函数,主调函数就会暂停,CPU 转而执行被调函数的代码;被调函数执行完毕后再返回到主调函数,主调函数根据刚才的状态继续往下执行。一个 C/C++程序的执行过程可以认为是多个函数之间的相互调用过程,它们形成了一个或简单或复杂的调用链条,这个链条的起点是main(),终点也是main()。
2025-02-09 22:13:44
512
原创 C++命名空间详解
域影响的是编译时语法查找⼀个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。在C/C++中,变量、函数和后⾯要学到的类都是⼤量存在的,这些变量、函数和类的名称将都存在于全局作⽤域中,可能会导致很多冲突。使⽤命名空间的⽬的是对标识符的名称进⾏本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下⾯的rand不在冲突了。指定命名空间访问,项⽬中推荐这种⽅式。
2025-02-09 11:27:58
337
原创 C语言的编译与链接
在 ANSI C的任何一种实现中,存在两个不同的环境。第一种是翻译环境,在这个环境中代码被转化成可执行的机器指令(二进制指令)第二种是执行环境,它用于实际执行代码。
2025-02-08 20:42:27
1065
原创 C语言文件操作(详解)
上⾯说的适⽤于所有输⼊流⼀般指适⽤于标准输⼊流和其他输⼊流(如⽂件输⼊流);所有输出流⼀般指适⽤于标准输出流和其他输出流(如文件输出流)。
2025-02-08 12:53:09
1369
原创 C语言结构体的用法详解
要使用结构体呢,就需要先创建一个结构体类型:struct 结构体名称 {成员类型1 成员名称1;成员类型2 成员名称2;...成员类型n 成员名称n;struct 是定义结构体的关键字,结构体名称用于标识这个新的数据类型,花括号内部包含了若干成员变量的声明。每个成员变量都有自己的类型和名称,它们之间用分号分隔。下面通过一个具体的例子来说明结构体的定义和使用。int age;int id;这里定义了一个名为 Student 的结构体类型,它包含 4 个成员。
2025-02-07 15:38:47
791
原创 整数和浮点数在内存中存储
整数的二进制表示有三种方式:原码,补码和反码。这三种表示方式均由符号位和数值位两部分组成,符号位为最高位,0为”正“,1为”负“,其余位均为数值位。原码:按照整数的形式翻译成二进制得到的就是原码。反码:就是将原码的符号位不变吗,其余数值位全部取反。补码:就是在反码的基础上加1。正整数的反码,原码都相同。而负整数的反码,原码,补码都不相同。//比如5的原码,反码和补码。原:0000000000000000000000000000101。
2025-02-06 11:48:46
857
原创 库函数的模拟实现
1.malloc(): 用于在堆(heap)中动态分配指定大小的内存空间,并返回指向分配内存的指针。函数原型为:void *malloc(size_t size);2.calloc(): 用于在堆(heap)中动态分配指定数量和大小的内存空间,并初始化为零。函数原型为:void *calloc(size_t num, size_t size);3.realloc(): 用于重新调整之前分配的内存空间的大小。可以用来扩大或缩小内存空间。
2025-02-05 16:16:56
518
原创 c语言深入理解指针
本质上,口语中所说的,其实就是是用来存放地址的一个指针。我们知道计算机上CPU(中央处理器)在处理数据的时候,需要的数据是内存中读取的,处理后的数据也会放回内存中。但在如今电脑内存越来越大的时代中,这些内存空间如何高效的管理?那么就要把内存划分成一个一个的内存单元,每个内存单元的大小取1字节,每个内存单元都有一个编号。有了内存单元的编号,CPU就可以快速找到一个内存空间。内存单元的编号 == 地址 == 指针。
2024-10-05 14:04:35
1721
原创 c语言实现简单的扫雷游戏
首先设置好棋盘,保证设置雷的棋盘和要展示的棋盘布置是一样的,这样能保证后续的操作。当然,如果需要更改难度,在宏定义中更改就行了。(毕竟搞的也不是很正式)在代码的宏定义中设置棋盘的大小和雷的数量。宏定义应设置在头文件game.h上。简便的打印棋盘并做一些美化。存放雷可能存在的问题。
2024-10-04 23:26:29
765
原创 C语言的分支和循环语句解析
在我们学习C语言相关知识的时候,C语言的分支和循环语句在我们想要重复执行我们想要的一段代码时,缺少不了的就是分支和循环语句。接下来我将介绍分支语句(if-else和switch),循环语句(break,contiune,for,while和do-while)。
2024-09-25 21:36:36
1361
原创 初来乍到来学C
初来乍到换一身妆,大家好,叫我君以思为故就行,同时也是一个对计算机专业感兴趣的爱好者,都说迈进编程C语言是一个迈入的大门,既然选择了那就满怀希望,将自己想要的用上自己能做到的最大的努力坚持下去。我的愿望是能进米哈游的大门,虽说有点痴人说梦,但是我会尽我自己最大的努力将这伟大的愿望转为我的现实,每周都自己制定好自己的计划,每天该怎么学,对自己抱有一定的信心。
2024-05-31 21:14:51
156
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人