自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 智能指针的说明与简单实现

智能指针比较全面的知识点与实现,都在这里

2022-07-14 21:46:31 563 1

原创 map和set的实现

前面我们实现了红黑树,https://blog.csdn.net/qq_55143256/article/details/125118713今天我们来用用map和set对红黑树进行封装如果你仔细看一下红黑树的实现代码,就会发现有一个东西很奇怪,就是KeyOfValue,那这是干什么的呢?就是封装map的时候需要使用的它在map里面的作用就是对map里面的键值对,提取其中的key,因为我们map比较的时候,其实是比较的键值对里面的key的map里面的[]符号不仅可以取key对应的value,还可以对插入,就是

2022-06-04 10:45:58 190

原创 红黑树的实现

红黑树的分情况调整

2022-06-04 10:14:56 298

原创 二叉搜索树的实现

注意:本篇文章采用c++,在vs2022底下调试二叉搜索树概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树说白了,就是它是一棵排序树,它的左子树都比它小,右子树都比它大,所以它中序遍历以后正好是一个有序的序列二叉搜索树节点实现这里采用的是模板的方法实现的节点,节点的每个值都是一个键值对templ

2022-05-26 15:47:22 285

原创 AVL树插入操作与验证操作的简单实现

目录AVL树的概念AVL树的特征AVL树节点的定义准备工作AVL树的插入按照二叉搜索树的方式插入新节点调整节点的平衡因子(*****)整体代码AVL树的概念二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了一种解决上述问题的方法:当向二叉搜索树中插入新结点后,如果能保证每个结点的左.

2022-05-23 14:39:57 337

原创 进程程序替换(Linux)---exec函数簇

目录为什么要有进程程序替换进程程序替换原理exec函数簇execlexeclpexecleexecvexecvp和ececvpe为什么要有进程程序替换因为父进程创建出来的子进程和父进程拥有相同的代码段,所以,子进程的代码和父进程是一样的。当我们想要让子进程执行不同的程序时候,就需要让子进程调用进程程序替换的接口,从而让子进程执行不一样的代码。进程程序替换原理我看网上好多文章都拿了一副很复杂的图,在我看来可以把它分成两部分,方便理解,第一部...

2022-04-27 18:05:21 813

原创 继承(c++)

1.继承的概念及定义1.1继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。是类设计层次的复用。class A {public: void func() { } int a;};class B : public A {public: int b;};我们写这样一段代码,表示B

2022-04-26 22:04:26 742

原创 Linux下进程虚拟地址空间分布情况

目录进程虚拟地址空间简单理解Linux下的进程虚拟地址空间总体理解为什么要区分用户空间和内核空间内核空间用户空间进程虚拟地址空间的其他知识页表写时拷贝进程虚拟地址空间简单理解我们有时候可能会听到说操作系统为每个进程都分配4G的空间,那不知道你有没有产生这个疑问,我的运行内存(不是磁盘)可能就8G,运行一个进程,好家伙,4个G没了,运行两个进程就分配完了,好家伙,那咱办?对于这个问题,你可以这样理解:不知道你有没有到银行存过钱,你的钱存到银行之后,你觉.

2022-04-26 13:24:34 1535

原创 STL中priority_queue优先级队列(堆)的自己实现

前面我们已经写了STL中string,vector,list三个容器和stack,queue两个容器适配器的简单实现,感兴趣的小伙伴可以去看一看,基本没有什么难的地方,今天我们来实现priority_queue优先级队列的实现1.STL标准库中的优先级队列的方法要自己实现,我们可以先看人家有什么,我们对照着,实现个大概,那也就差不多了priority_queue - C++ Reference (cplusplus.com)c++11里面的我们不管,我们只实现c++98里面的这几个就行了

2022-04-25 11:40:27 1122

原创 STL中stack(栈)和queue(队列)两个容器适配器的简单自己实现

前面说了关于STL中的三个容器的简单实现,今天我们来说两个容器适配器的实现,也就是标题所说的栈和队列,这两个...只能说太水了,这两个的实现代码实在是太简单了,大家不要想着有多复杂,质押理解了什么叫做容器适配器,那你看这两个代码就感觉这是在开玩笑,完全就是换了一个皮嘛容器适配器接下来,灵魂画手上线大家遇到过这种窘境么,他喵的,不匹配,难受,人不匹配了还能换一个,这充不上电,那可真是要人老命了,还好,办法总是有的,你可以再买个匹配手机插头的插座,然后一端连在原本的插座上,另一端连手机插头,嗯,

2022-04-25 11:00:23 512 1

原创 STL中list类的自己简单实现

前面写了STL中关于string类和vector类的简单实现,要想成体系学习的小伙伴可以看一看(48条消息) STL中vector类的自我简单实现_芜湖开冲~的博客-CSDN博客https://blog.csdn.net/qq_55143256/article/details/124241928(48条消息) STL中vector类的自我简单实现_芜湖开冲~的博客-CSDN博客https://blog.csdn.net/qq_55143256/article/details/124241928今天我们继

2022-04-20 16:45:12 1305 1

原创 STL中vector类的自我简单实现

前面写了STL中关于string类的自我实现,感兴趣的小伙伴可以移步至这里((45条消息) STL中string类的自己实现_芜湖开冲~的博客-CSDN博客https://blog.csdn.net/qq_55143256/article/details/124212845),接着上面,今天我们来实现vector类的简单实现(友情提示:很全,比我网上找到的大部分都全),所谓的vector类,其实就是顺序表,只不过这个顺序表不仅能存放int,还能存放各种各样的类型,vector类的实现其实也不是很难,别看底下

2022-04-18 10:57:29 503

原创 STL中string类的自己实现

STL在c++中的地位想必不用赘述,想比于C语言,当你第一次接触c++的时候,你会惊叹于它的方便与便捷,真的是,应了那句话:"腰也不疼了,腿也不酸了,刷题也不头疼了,整个人都自信起来了".言归正传,今天我们来一步一步实现这个为我们提供方便的STL中的string类(友情提示:很全,比我网上找到的大部分都全),虽然比较全,却一点也不麻烦,有含金量的就那么几个函数,其他大部分都是重载,所以小伙伴不妨往下看一看吧.目录详细步骤1.设置自己的命名空间:2.设置类名:3.设置权限:4.this

2022-04-18 08:49:56 899

原创 C++模板

1.泛型编程泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。需求世界是懒人创造的,有需求才会有进步,生活中,我们可以用一个模子就刻出好多个一模一样的玩意那么,有没有办法在写代码的时候,我们自己刻一个模子,然后写一次,用一辈子呢?答案是肯定的,要不然我写这干嘛,对吧例子比如说交换函数,之前我们写交换函数,要满足各种类型,只能函数重载,就要写好多份,int的来一份,char的来一份,double的来一份等等,但是我们可以想办法写一份模子代码..

2022-03-31 16:36:58 287 1

原创 C++入门

1.C++关键字2.命名空间在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。举个例子:两个人合力开发,大家都想要给变量取名叫做a,那最后合到一起编译器就不知道a到底该用谁的了,这就需要两个人都设置一..

2022-03-24 18:23:38 675 1

原创 二叉树的实现

头文件binarytree.h:#pragma once//创建二叉树结构体typedef int BTDataType;typedef struct BinaryTreeNode{ struct BinaryTreeNode* left; struct BinaryTreeNode* right; BTDataType data;}BTNode;//二叉树节点的创建BTNode* BuyBinaryTree(BTDataType data);//二叉树的创建BTNo

2022-01-20 11:14:06 532

原创 shell和bash(Linux)

1.shell我们知道在Linux操作系统中,我们要干任何事情基本都使用的是命令行,但是,尽管我们觉得它已经很不友好了,但其实,Linux原本是更加不友好的...我们输入ls就能列出当前目录下的文件,输入pwd就能查看当前路径,但其实,这些可不是Linux系统自带的,而是,我们用的shell解释器帮我们解释给Linux系统的,不然Linux可就更加难了,你以为的岁月静好,只是有人替你负重前行(狗头).bash则没有什么好解释的,shell的版本很多,bash是其中特别重要的一个.像我的就

2022-01-13 21:23:15 180

原创 进度条程序详解(Linux)

话不多说,先贴源码,后面是讲解#include <stdio.h>#include <string.h>#include <unistd.h>int main() { char dir[101] = {0}; memset(dir, 0, 101); char* str = "|\\-/"; int i = 0; while (i < 100) { dir[i] = '#'; i++; printf("[%-

2022-01-06 17:12:20 862

原创 make和Makefile通俗易懂,全篇没有引用官方文字(Linux)

学习make/Makefile,首先应该明白这两货是干嘛的.好,不卖关子,也不引用定义(定义老是能让我望而生畏),用人话来说,就是创建工程的.不知道大家有过这种经历没有,刚开始学习C语言的,不管用哪个软件编写,总是要起两遍名字,我那时候就在疑惑,为什么要起两次名字啊,我直接创建个文件,起个名字不就行了么?那时候老师也没有解释,估计是默认我们都懂,结果我确实不懂,一个学期学下来都不懂为什么要起两遍名字,期末课设,老师让交工程文件,我都不知道是个什么玩意,问同学,同学说指定选哪个哪个,最后弄出来的就

2022-01-04 11:29:57 711 1

原创 Linux权限的简单理解

首先,要理解权限,要先明白一个概念,即一般情况下,Linux的文件有两种,目录文件和普通文件,如果你的Linux系统是买的服务器的话(虚拟机我没有用过,不太清楚到底是什么样子的),最简单的方法是输入ll(两个小写字母l,不是数字1),就可以看出目录文件和普通文件的区别:可以看到我红色框定的内容就是目录文件,在红色框和绿色框交接的地方就是这个目录文件的文件类型,也就是"d"表示这个文件是一个目录文件,每个文件的第一个符号都表示了这个文件的类型,绿色框定的其他三个都是"-",表示是普通文...

2021-12-27 12:57:02 311

原创 a==b==c 与 a==b && b == c 的区别(小知识点)

因为刚才有这个疑问,在csdn上又没有找到,所以把这个知识点写一下,也算是帮助自己记忆一下a==b==c的意思是:先看a与b是否相等,相等为1,不等为0,然后再看这个结果(1或者0)与c是否相等,相等为1,不等为0.而a==b&&a==c就是要求a和bc都相等整个表达式才能为真....

2021-12-21 08:57:12 1328

原创 堆的实现(大小堆都可以)

前面已经写了有关于小堆的代码((40条消息) 小堆的实现_qq_55143256的博客-CSDN博客),这次是改进的版本,就是说既可以是大堆,也可以是小堆主要是头函数和实现函数方面做了一些调整头函数#pragma oncetypedef int HPDataType;typedef struct Heap { HPDataType* a; int size; int capacity;}Heap;int (*com)(int a, int b);int Comp1(in

2021-12-17 11:35:41 61

原创 小堆的实现

1.头函数#pragma oncetypedef int HPDataType;typedef struct Heap { HPDataType* a; int size; int capacity;}Heap;int (*com)(int a, int b);//函数指针的尝试,用com1函数和com2函数作为一次尝试//int Comp1(int a, int b); //a比b大则返回1,否则返回0//int Comp2(int a, int b); //a比b大则返回

2021-12-17 10:58:04 229

原创 队列的链式结构实现

这个也不算很难,主要的是想清楚这个是结构体套结构体这一点,就是说我们要有队列的结构体,然后队列的结构体里面有一个对头指针(front),和队尾指针(back),这两个指针都指向一个结构体(这个结构体就是对列的每个节点对应的结构体).说白了就是队列里面的元素构成了一个链表,然后front指向链表的头,back指向链表的尾,就这样而已.下面是具体的实现.1.头文件#pragma oncetypedef int QDataType;//表示队列中的一个节点typedef struct QL

2021-12-01 18:01:59 858

原创 循环队列的实现(顺序表的方式)

以下是实现的函数,经过测试没有发现什么问题,欢迎留言讨论typedef struct { //创建队列 int* array; int front; int rear; int count; int N;} MyCircularQueue;MyCircularQueue* myCircularQueueCreate(int k) { //构造长度为k的队列 MyCircularQueue* q = (MyCircularQueue*)malloc

2021-12-01 16:18:47 582

原创 栈的实现(简单)

关于栈的实现,还是很简单的,直接上代码:1.头文件#pragma oncetypedef int STDataType;typedef struct Stack { STDataType* array; int capacity; //容量 int size; //既表示有效元素,也表示栈顶;}Stack;// 初始化栈void StackInit(Stack* ps);// 入栈void StackPush(Stack* ps, STDataType data);/

2021-12-01 12:27:32 153

原创 链表的C语言实现

首先是头文件,里面的每个函数的功能都有标#pragma oncetypedef int SLTDateType;typedef struct SListNode { SLTDateType date; struct SListNode* next;}SListNode;//动态申请一个节点SListNode* BuySListNode(SLTDateType x);//链表查找SListNode* SListFind(SListNode* plist, SLTDateType

2021-11-25 11:14:45 550

原创 母牛问题详解

问题:有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛? 详解:典型的递归问题,解决递归问题主要就是两步:1.找出结束递归的语句(也就是递归进行到哪里就不继续递归了).2.找出递归的语句(就是说如果不满足结束语句就执行这个语句,然后一步一步接近递归结束的语句).对于这个问题,结束递归的语句是比较好找的,你会发现变数是从第四年开始的,所以应该是年数小于4,然后返回什么。而递归的语句...

2021-11-18 10:51:06 1456

原创 关于字符串函数的一些体会

1.如果要自己实现字符串函数,一般涉及到的两个字符串前面的是要被进行操作的字符串。2.strcmp.即字符串比较函数,比较规则用我自己的话总结就是:1>放进字符串的两个参数,如果第一个小于第二个,就返回小于0的数,大于就返回大于0的数,相等就返回0。2>具体的比较规则是:小写大于大写,字典后面的大于前面的。3.strstr.判断一个字符串是不是另一个字符串的子字符串,是的话就返回开始相等的部分的指针,原理比较麻烦,有时间的话,以后再专门写一篇博客进行解释。这个有点麻烦。一般是判断

2021-11-02 17:52:51 159

原创 三子棋的实现思路(C语言)

三子棋,顾名思义,就是三个子连成一串就算赢。个人认为,三子棋的实现大概分为以下几个步骤:1.你得搞一个棋盘。棋盘其实很简单,首先定义一个数组(最好初始化为空格),printf一个漂亮的棋盘外围,然后把数组的各个元素也搬到printf里面就行了,我是这样实现的:当然肯定不止这一种实现方法,具体根据自己喜好弄就行了。2.玩家落子玩家落子就是输入一个坐标,然后将坐标对应的数组元素改为x,o这种的,当然也可以用数字表示,我下一个字对写个1,也行。当然这里面有一些注意的点,比如说数..

2021-10-29 17:12:28 243

原创 数据在内存中的存储

1.整数在内存中是以二进制补码的形式存储的。(所以尤其要注意负数的隐式类型转换)2.要搞清楚大小端字节序的问题。(重点)所谓的大小端字节序,举个例子:从0X100开始,到103结束,这是一个int型占据的内存大小,(每个小格子就是一个字节)此时要是存放一个数字,比如说0X11223344,本来按照正常的思维,0X100里面应该存放的是0X11;但是事实上里面大概率存放的是0X44(即这个数字的低位),像这种低位放在低地址存储的方法,我们把他叫做小端字节序,对应的高位放在低地址(也就是我.

2021-10-26 16:01:11 113

原创 关于输出一个数字的每一位的方法

1.第一种最简单的方法及解释:#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>int main() { int a = 0; scanf("%d", &a); while (a) { printf("%d ", a % 10); a /= 10; }putchar(10);}先取这个数字的最后一位,然后除以10,当剩下一位数的时候,再取余就是他本身,再除...

2021-10-25 11:23:06 4245

原创 我的编程计划

我是一名大三学生,身为一名大三学生,前两年过得稀里糊涂的,暑假里,由于参加了十四运,认识了好多伙伴,开始感到了自身的不足,所以整理了这篇文章,既是一个计划,发表出来也算是对自己未来的监督! 学编程,说实话,就是为了挣钱,但我知道,如果只是为了这个,我估计很难在一些情况下坚持下去,所以,哪怕是为了坚持下去,我也得找一些别的理由来忽悠自己。首先,学习编程的同时可以学习好多的新的思想,这些思想不仅仅可以运用的编程里面,现实生活中也可以运用到,学习这些思想的同时还可以提高自己的逻辑...

2021-09-19 14:25:54 72

空空如也

空空如也

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

TA关注的人

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