- 博客(42)
- 收藏
- 关注
原创 STL模板 map set的使用和模拟实现
用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量key和value,key代表键值,value表示与key对应的信息T1 first;T2 second;{}{}我们从上述的定义可以看出来,这里的pair就是键值对<first,second>的标志,同时键值对的本质是一个类,因此我们访问键值对的数据的时候,就可以按照访问类的成员那样访问即可。
2024-03-23 23:46:01
848
原创 二叉树进阶---二叉搜索树的另一种平衡方式----红黑树(RB树)Red-Black Tree
前言:上文我们提到了AVL树,AVL树是二叉搜索树的绝对平衡版本,是能够让我们的搜索效率最为接近log2Nlog2Nlog2N的满足二叉搜索树性质的,但由于自身过多的旋转过程,导致一旦有频繁的修改操作时,其效率就会变得很低。因此,本次我们来介绍一种更为通用且好用的RB树,即大名鼎鼎的红黑树。红黑树的性质与规则:1.性质如图,这就是一颗最为常规的红黑树,让我们仔细观察这颗树,我们会发现红黑树的节点是由红色和黑色两种颜色组成的,既然带了颜色,则这些颜色一定尤其特殊的含义,由此我们总结出我们红黑树的性质
2024-03-12 09:51:08
974
原创 二叉树进阶--二叉搜索树的进一步优化--AVL树 Self-balancing binary search tree
当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1(需要对树中的结点进行调整),即可降低树的高度,从而减少平均搜索长度这样就避免了出现单支树的情况,同时保证了BS树的结构不变。以上便是关于AVL树的全部内容了,后续我会更新AVL树的删除节点的代码,希望在看完本文后,可以让你学会使用AVL树进行数据存储。
2024-03-10 10:55:42
1002
原创 二叉树进阶---二叉搜索树Binary Search Tree
那么首先的一个问题,什么是二叉搜索树呢?一棵普通的二叉树的效率其实是很一般的,但假如我们可以对数据进行一个简单的排序呢?比如根节点的左节点数值都小于根节点,而反之右节点的数值都大于根节点,这样我们查找数据的时候就可以排除一半进行查找,效率就得到了提升(log2的N次方,即一半一半的查找).二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值。
2024-01-25 11:14:54
1006
2
原创 C++入门第十一篇----多态
到目前为止,我们已经学习了三个相近的概念:函数重载,虚函数重写,函数隐藏这三者的关系用下面的一张图表示就是:首先先看作用域,在同一个作用域里面的就是重载,反之就是重写和隐藏中的一种,之后再根据重写的条件判断是否构成了重写,倘若不是就是隐藏。public:virtual person& getpid(int m=10)//加=0就是抽象类private:int _a;
2023-12-05 12:32:04
1102
原创 C++入门篇第十篇----继承
class A;class B;class C;在这里,就是先去拷贝构造C,然后是B,然后是A,根据继承的先后顺序去调用以上便是继承的全部内容了,可以说,继承的出现让我们对类和对象的使用又有了更多的花样,同时也进一步确定了类和对象在C++的地位之高,基本上几乎所有的语法都是在为类和对象的使用进行扩展和补充,他们在实际的工程中十分常用,现在你可以用自己的想象力为自己构建一个游戏人物的对象模型,让我们进一步熟悉继承和类和对象这方面的知识点。
2023-12-02 18:27:35
1017
原创 LINUX入门篇【11】---进程篇【3】---进程优先级,进程切换,进程调度
本篇文章我们系统总结了进程优先级,进程切换,进程调度的问题,我希望结合前两个进程篇的知识,我们把整个进程在OS中的工作方式系统的去梳理一遍,保证每一个逻辑都是清晰的,有模糊的地方就去重新查看文章的细节,进程将对我们使用计算机的时候的一些现象有了更加合理的解释,所以,更希望大家在使用计算机的时候刻意去尝试推测某个软件所处的状态,从而进一步深化我们的进程知识。
2023-11-29 09:38:08
1902
1
原创 LINUX入门篇【10】---进程篇【2】---进程状态
以上便是我们的PCB第二个重要的数据段:进程状态,之后我们就会讲解下一个数据段:进程优先级,其实进程状态的本质就是PCB被链接到不同的队列中,希望大家可以再进一步理解一下进程状态,并且最好可以同我们使用电脑时的一些实际情况联系起来,从而获得更好的理解。5。
2023-11-27 21:20:26
1939
3
原创 LINUX入门篇【9】----进程篇【1】----进程的初步认识和理解---进程的标识符以及对应的系统调用函数
进程=可执行程序和数据+内核的PCB数据结构,而这个PCB则是便于OS对进程进行管理介绍完了整体的进程概念,下面让我们来认真学习一下PCB的内部的成员都记录了一个进程的哪些相关属性呢?struct PCB//id//代码地址&&数据地址//状态//优先级//链接字段struct PCB* next//即指向下一个PCB进程的指针,指向下一个next我将依次解析这里面的每一个成员。在这篇文章中,我们系统的初步认识了进程的各种概念,并且学习了PCB的第一个数据段:标识符和相关的系统函数调用。
2023-11-26 23:35:48
1117
2
原创 C++入门第九篇---Stack和Queue模拟实现,优先级队列
deque被称为双端队列。虽然叫它队列,但实际上它并不是队列,也就是说它不是仅仅可以尾插头删,只不过叫这个名字,这个首先要明确,别搞混。
2023-11-24 10:31:39
2313
1
原创 LINUX入门篇【8】----计算机组成原理以及OS知识的总结
由此,我们的计算机组成结构和OS操作系统的知识就完毕了,我希望通过这篇文章你可以理解何为冯诺依曼体系以及为什么要使用冯诺依曼体系,OS存在的意义是什么?计算机层状结构中OS都充当着什么作用,何为管理,怎样理解“先描述再组织”这简短却十分重要的6个字,以及操作系统是怎样跟用户交互的,当这些问题都解决了,我们就有了学习进程的良好基础,为接下来学习进程做一个充分的准备!!
2023-11-22 20:23:48
193
4
原创 C++入门第八篇---STL模板---list的模拟实现
在STL模板中,list模板实现的是一个双向带头循环的链表。1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。
2023-11-21 12:18:46
706
原创 LINUX入门篇【7】--git提交指令以及代码调试工具gdb
关于gdb和git,我们还有很多功能值得去探索,大家可以在看完这篇文章之后,先掌握基本的调试指令,然后自此基础上不断的去扩展,从而强化自己的调试能力,不过我觉得其实直接去看代码有的时候效果更好,反而调试效率变低的,但是调试这个能力我们是不能缺失的。到这里,我们的全部的linux的代码编写工具就基本完成了,现在我们就可以用LINUX去编写我们的C/C++的代码了,下一步我们将进入进程篇,去体会计算机操作系统是如何去掌控软硬件的。
2023-11-20 16:45:42
128
原创 LINUX入门篇【6】----第一个LINUX小程序---进度条及相关知识讲解
无论如何,我们的进度条代码算是完成了,这是我们的第一个LINUX的小程序,但不会是最后一个,写下了这个小程序,让我们更加熟练的使用LINUX去写代码,这才是我们的关键所在,学习LINUX不仅仅是会写代码,同时要对整个生态,系统的一些很多知识有更多的理解和新的感受,这才是最关键的。
2023-11-17 17:32:49
478
3
原创 C++入门第七篇--STL模板--vector模拟实现
以上便是我们vector模拟实现的全部内容,和string一样,我们模拟实现vector最关键的目的是学会一些思路,以及熟练的去使用vector,这是最关键的。补充一句,WBG加油!!!!
2023-11-16 12:04:45
329
2
原创 LINUX入门篇【5】----程序的翻译过程解析
本篇,我们进一步查看了程序是如何被翻译出来的,以及库的链接是如何进行的,同时我们也清楚的知道,我们所写的程序是多种库组合出来的结果,没有这些库,我们的函数就需要自己去构造,很麻烦,库进一步帮助我们提高了开发效率,同时,也让我们对开发环境的配置要求有了一个初步大概的认识。之后,我们将进一步配置完善我们的代码编写vim工具,并且可以在LINUX上实现我们的第一个有趣的程序。
2023-11-10 16:39:24
159
1
原创 LINUX入门篇【4】开发篇--开发工具vim的使用
在LINUX中,我们也需要用工具进行操作,既然涉及到操作系统,自然离不开对软件的操作,在LINUX中我们也要进行工具/指令/程序/安装/检查卸载等,需要软件去进行这些操作。常见的下载软件的的方式有:1.源代码安装,交叉编译(有时需要选择安装路径)2.rpm包直接安装,安装的本质,就是把可执行程序拷贝到指定的路径下即可,这是对安装最基本的理解。3.yum/apt-get一键式安装,在这里,我们最推荐最后一种通过yum安装,这也是我们今后下载的主要方式。
2023-11-09 14:54:40
677
1
原创 C++入门第六篇—STL模板---string【下】string模板的实现
由此,我们的模拟string类基本就实现了,但还是有很多功能需要我们去探索,我们实现的这些都是我们常用的string库的函数,而且我们模拟实现string类的本质依旧是方便我们去使用string类以及学到一些方法,这是最关键的,要清楚自己的学习目的!!!!以上便是我们string类的全部内容,通过模拟和讲解,我们要掌握的时如何熟练的使用string库,从而为我们做题和运用的时候提供方便,更加快捷的开发程序,同时在模拟的过程中学习一些思路和方法,扩展我们的程序思路,这便是主要的目的,希望大家认真去体会和领悟。
2023-11-05 15:03:41
170
原创 C++入门第六篇---STL模板---string【上】string模板的介绍
现在,我们已经有了模板的概念并且清楚模板如何使用,模板的知识是我们接下来的STL模板库的一个重要的铺垫,一定要先弄明白再向下进行,否则对于模板库的理解会出现问题。STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。也就是说,通过模板库,我们只需要传参就可以实现对应的功能,不需要再像C语言那样自己手动构建这些框架和功能。字符串是表示字符序列的类。
2023-11-04 10:02:51
313
1
原创 C++入门第五篇--内存管理
以上便是全部的C++内存管理的内容,在我看来,C++无时无刻不在体现它对于自定义类型的重视,在实际的情况中自定义很常见,故能够很好的处理自定义类型的语言确实对我们的开发很有效,它能解决很多的语法限制。
2023-10-31 17:01:13
165
4
原创 C++入门第四篇----详解C++类和对象知识点
以上便是我对类和对象的全部理解,其实还有很多地方理解十分的粗糙和肤浅,但我会继续努力,争取在C++上更进一步。
2023-10-29 21:07:46
127
1
原创 贪吃蛇小游戏的实现【C语言魅力时刻】
我们大致要实现的效果如下:你可以看到,这两张游戏界面中,我们首先修改了我们的控制台的名称,其次我们隐藏了我们的光标,然后我同时做到了在控制台上的任意位置打印输出我们的文字。前面的改名字和暂停我已经说过,接下来让我们来说说如何改变控制台坐标以及如何隐藏光标。
2023-10-27 13:01:03
945
2
原创 LINUX入门篇【3】
LINUX权限是我们理解操作系统包括windows和LINUX他们的一个基础,通过对权限的学习以及前面的LINUX知识的学习,我想我们最应该刷新我们对操作系统这个东西的概念和认识,应该清楚操作系统到底是什么,我们当前操作的电脑是如何和硬件交互的,我们操作计算机的权限和功能是怎样匹配的,身份和权限是怎样的概念,我想掌握这些,我们下一步就可以进入我们的LINUX的开发篇了。
2023-10-24 17:54:50
81
原创 C++入门第三篇----类的默认6个成员函数【上篇】——构造函数 析构函数 拷贝构造函数 赋值重载
即当用户没有显式实现时,编译器会自动生成的成员函数被称为默认成员函数,当用户显式时,编译器就不会i自动生成,而会使用用户自己手写的默认成员函数。这个定义很关键,我们后序还会反复提及,在这里要理解透先。以上便是前三种最为重要的类默认的成员函数,这些成员函数的存在方便了我们的C++在程序书写时要远远优秀于C语言,故希望各位好好学习这几种函数,为C++的学习来一个好的开始。
2023-10-24 10:47:04
135
2
原创 LINUX入门篇【2】
其中的Y表示年 m表示月份 d表示天 H表示小时 M表示分钟 S表示秒注意事项:1.-的位置用其他符号也可以,主要是起到分隔的作用2.注意m和M分别表示 月份和分钟,别搞错了,同时注意大写S表示秒,别写成小写s.3.注意加号不可省略,要写加号+2.date +%s :会打印出时间戳(时间错的概念我们在创建随机数的时候提到过,这里不多赘述了,为1970到现在的时间总和)
2023-10-20 08:31:51
249
2
原创 C++入门第二篇---类和对象【1】&&C++语法细节补充
成员函数如果在类中定义,编译器可能会将其当成内联函数处理。在这里,我更推荐第二种,因为在实际工程中我们往往把声明和定义分离,因此第二种写法更加常见和适用。
2023-10-18 20:20:14
111
3
原创 C++入门第一篇----基础关键字总结和C++一些优于C语言的总结
以上便是我初入C++掌握到的一些知识点,你会发现很多知识点在展开的时候都和C语言有联系,没错,要知道任何事物的产生都有其意义,倘若C语言是完美的,那么C++便没有诞生的可能性了,C++就是为了优化C语言的语法和错误而诞生的语言,我们接下来的学习也应该参考C语言的语法去思考,去举一反三,从而了解C++语法为何而诞生。
2023-10-17 16:33:55
226
3
原创 大数据管理的重要思想和算法总结----排序
稳定性的概念是数据的相对位置的变动情况是否频繁,比如,在一个数组中,1 2 4 6 7 8 9 10 11 100,我们说9相当于2的位置是在2的后边,在排序的过程中,若9总是在2的后边,则我们说这种排序的稳定性是很好的。排序作为计算机管理数据最常用也是最关键的数据管理知识之一,其掌握用重大意义,希望各位可以认真学习这块的相关内容,争取做到“数据掌握易如反掌”!!!!
2023-10-10 08:10:04
398
3
原创 树形结构——二叉树专题总结——满二叉树,完全二叉树(堆),普通二叉树以及相应的数据管理方式
以上便是二叉树基本问题的总结,二叉树还有很多变种题目以及形式,故希望各位可以不断持续刷题或者深入学习,二叉树后期还会为红黑树,B树等更加复杂的结构打基础,也是C加加的基础知识,所以希望各位能进一步强化这部分内容。
2023-10-07 13:25:25
603
4
原创 LINUX入门篇【一】
不同于windows的相当简单清晰的操作方式,LINUX使用更加古老的操作指令去控制操作系统,没有可视化面板(当然你如果用虚拟机的话,也是可以有的,不过我这里使用的云服务器)。这也决定了LINUX的市场是很难超越windows的。所以,我们接下来会介绍第一批LINUX的指令。1.whoami:查找当前正在使用的用户是什么2.who:查找当前机器上有哪些用户正在使用3.pwd:查找当前的目录位置4.clear:清空屏幕A.ls:显示当前目录有哪些文件(不包括隐藏文件),但不显示详细信息。
2023-10-04 14:48:07
132
3
原创 动态内存管理总结
就像文件操作一样,动态内存也强调其使用的步骤,其最关键的在于使用了动态内存后一定要及时释放,即使用free函数。1.对NULL指针的解引⽤操作*p = 20;//如果p的值是NULL,就会有问题free(p);2.对动态开辟空间的越界访问int i = 0;for(i=0;i<=10;//当i是10的时候越界访问free(p);3.对⾮动态开辟内存使⽤free释放int a = 10;free(p);//ok?
2023-10-03 10:57:40
115
原创 C语言文件操作函数总结
文件的读写方式分为两种:第一种为顺序读写,第二种为随机读写以上便是我对文件操作的一些粗浅的理解,掌握了文件,我们实际上就可以做一些真正能存储数据的程序了,虽然很简陋,但是也比存不下来要强很多,希望各位通过这篇文章能够彻底弄懂文件操作。
2023-10-01 00:40:23
267
2
原创 程序的编译和链接
以上便是我对于翻译环境和执行环境的理解,从这篇文章我们要明白,学习计算机从来不仅仅是掌握一门语言或者掌握算法那样的简单,我们要深入了解我们在写什么,为什么这么写计算机能看懂,而且,我们要养成刨根问底的习惯,掌握其底层和基础,而不是仅仅浮于表面。对于这部分知识感兴趣的朋友,可以去读一读《程序员的自我修养》,以便更好的去理解计算机的编译原理。
2023-09-29 10:05:05
169
1
原创 字符.字符串操作函数和内存操作函数的总结
内存操作和字符串操作函数的模拟实现对于代码能力有很强的提升,同时也希望通过这几个函数能够进一步提高我们学习函数时的思路,即看参数,看返回值,看实现功能三个方面,后续我也会更新KMP算法的内容,希望经过这篇文章,我们对于内存和字符串,字符的操作能力能不断增强!!!!!
2023-09-23 21:49:15
145
1
原创 自定义类型总结
我对枚举体的理解是:枚举实际上可以理解为一种预处理的集合,将整型数字本身按照次序预处理为相应的枚举符号,从而可以让我们直接更具体的知道我们要调用的数字代表着什么意思,但主要,本质上仍为整型数字,而不是对应的符号,故枚举体的大小即为一个整型4个字节的长度。枚举体一般用于对于工程中一些数字的下一步语句控制进行更加具象化的描述,以帮助程序员更好的理解其代码意思。
2023-09-19 20:10:05
349
4
原创 关于整数和浮点数在内存中的存储的总结
以上便是整数和浮点数在内存中的存储问题,这里面的知识点不难,只是需要记很多东西,建议忘记的时候就反复拿出来复习,强化自己对于数据类型的理解能力和内功。
2023-09-17 17:29:42
460
3
原创 指针一些关键知识点和难点的总结
以上就是指针关键点目前我总结的一些问题,后续还有我还会补充,指针作为难点,很关键,所以学习计算机语言的各位一定要多花时间去理解和校准。
2023-09-09 12:23:41
420
4
原创 关于栈和队列问题的总结
队列,顾名思义,如同我们小时候排队,一般都是最矮的站在队尾或者队头,有时候是最高的,然后按照身高一次排列,假如我们按照从高到低的顺序排队从一个走廊里走进去,然后顺着一个方向走出来,我们会发现,最高的人是第一个进入走廊的,出来的时候也是最高的人先出来,而最矮的人是最后一个进入走廊的,但反方向出来的时候最矮的人却是第一个走出来的,这就是队列的大致特点。队列一共有头和尾两个接口,我们添加元素的时候只能从尾部去添加,而从队列中删除出元素的时候只能从队列的头部去出。
2023-08-28 09:05:50
512
1
原创 近期一系列个人做题反复记不住以及思路不清晰问题的总结
没错,二维数组,我这样的写法完全可以把杨辉三角带入成一个二维数组,观察此二维数组,我们看到,其第一列和斜线方向都是1,联想到前面打印菱形的思路,我们说过那道题我建立了一个拟二维数组,既然那里我们运用了行列关系,在这里我们就更应该应用自如了,所以首先打印出全部的1,然后,运用我们分析的杨辉三角的数的规律去打印1内部的数字,利用坐标的关系去打印即可。后面还有两道题,在这里我就不写具体解法了,我们要总结这类题的特点都是利用你创建的两个循环的变量的关系去让其进行各种排列,按照这种思路去求解即可。
2023-08-02 21:53:35
123
原创 扫雷游戏的实现
首先思考,棋盘的本质用我们学到的知识可以理解为什么呢?如上图所示,我们可以清楚的看到,正如我前面所说,我们游戏的具体内容的实现是依靠一个又一个函数的按次序排列来实现的,这么多函数的使用,如果放在主程序test.c里就非常混乱,倘若我们以后想要优化或者修改的话效率很低,所以这个时候我们就要使用另外两个文件,hanshu.c源文件和shengming.h头文件,在hanshu源文件里,我们主要是书写游戏实现的一些函数内容,而在头文件里,我们则需要书写各种声明和定义,这里,我们首先说明一下我们的头文件。
2023-07-31 23:56:55
332
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人