自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AVL树的四种旋转方式(详细图解)

新节点插入到左子树的右侧时对parent使用左右双旋。新节点插入到右子树的左侧时对parent使用右左双旋。新节点插入到右子树的右侧时对parent使用左单旋。新节点插入到左子树的左侧时对parent使用右单旋。

2022-11-09 15:25:10 872 1

原创 动静态库的制作和使用(超详细解析)

静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将不再需要静态库动态库(.so):程序在运行的时候才去链接动态库的代码,多个程序共享使用库的代码。一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表,而不是外部函数所在目标文件的整个机器码在可执行文件开始运行以前,外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中,这个过程称为动态链接动态库可以在多个程序间共享,所以动态链接使得可执行文件更小,节省了磁盘空间。

2022-11-09 12:38:27 226

原创 红黑树(Red Black Tree)超详细解析

​ 红黑树,是一种二叉搜索树的特化,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出两倍,因而是接近平衡的。​ 红黑树和AVL树都是高效的平衡二叉树,增删改查的时间复杂度都是O(logN),红黑树不追求绝对平衡,其只需保证最长路径不超过最短路径的2倍,相对而言,降低了插入和旋转的次数,所以在经常进行增删的结构中性能比AVL树更优,而且红黑树实现比较简单,所以实际运用中红黑树更多。

2022-11-09 08:58:27 944

原创 十条虚拟地址空间核心知识

程序被加载至物理内存运行的时候,会建立虚拟地址空间,并不会分配实际的物理内存,而当进程需要访问资源的时候才会由内核的请求分页机制产生缺页中断,这时才会将需要访问的资源从磁盘加载至物理内存,并且建立虚拟地址和物理地址的映射,调入物理内存页,更新页表,通过这种方式保证我们的物理内存只有在实际使用的时候才进行分配,避免了内存浪费。1.物理内存缺乏访问控制,安全性不足,各个进程访问如果都访问物理内存,可能相互影响,影响了进程的独立性,物理内存极小,并发所需内存大,容易导致内存不足,还容易导致内存碎片化的问题。

2022-10-10 18:26:14 145

原创 反向迭代器(rbegin,rend)详解

理论上只有迭代器能实现–操作就才能实现反向迭代器,因此一些单向容器是没有反向迭代器的,这种适配器迭代器模式极大的简化了代码,并且更加容易理解,是一种经典的设计模式。

2022-10-10 09:46:08 968

原创 Vector迭代器失效详解

我们知道vector容器的迭代器就是一个原生指针,它的指向的数据类型由模板参数决定。当vector发生空间变化时,就有可能引起迭代器失效,能使空间变化的函数接口有resize() / reserve() / push_back() / insert() / assign() / 这几种。迭代器失效是指因为没有接收迭代器的返回值,同时迭代器指向的空间因为容量已满/容量小于一定大小/发生数据的整体转移,然而这个迭代器没有及时更新自己,还指向原来的空间,出现野指针非法访问。

2022-09-26 10:49:03 417

原创 用STL容器超简单实现栈和队列

容器适配器时stl六大组件之一,其中包括了stack,queue,priority_queue,那么什么是适配器呢?适配器是一种设计模式它的意义是把一个类已有的接口,经过包装改造成我们自己的类的接口,这主要依靠模板和stl中统一的命名来实现,还需要进行接口转换的类符合我们自己设计的类的要求才能使用。虽然stack与queue也能存储数据,但是stl并没有把他们划分为容器一类,理由是他们的实现依靠的是其他类,故把他们单独分类为容器适配器。

2022-09-25 16:50:54 124

原创 数据结构之栈和队列C语言模拟实现

栈的特性是先进后出(FILO)。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的代价比较小。

2022-09-24 12:24:16 374

原创 几十行代码轻松实现shell外壳程序(基础版)

shell外壳是连接用户和操作系统的一种中间层软件,负责将用户输入的指令经过处理后提交给操作系统。shell外壳本身也是一个进程,它最主要的职责就是创建子进程并让子进程完成某些任务,但有时shell外壳也会自己执行任务,在linux系统下shell外壳称为bash。

2022-09-22 21:33:59 421

原创 两种线性表的详解(顺序表、链表)

线性表指的是在逻辑上,数据元素呈现线性排布的一种数据结构,它的物理结构并不一定是连续的,通常的表现形式是用静态数组、动态数组、链式结构来实现。

2022-09-13 13:26:04 213

原创 C++模板详解(函数/类模板)

​这是一个 swap 函数的例子尽管可以使用函数重载来实现不同类型的 swap,但是每需要增加一种交换类型,就要多写一份重载函数,代码复用性低,并且容易出错。

2022-08-17 12:26:24 738

原创 new与delete的使用及原理,C++内存管理

1.malloc2.new delete关键字3.operator new和operator4.定位new5.malloc free和new delete异同。

2022-08-10 11:04:09 247

原创 初始化列表详解

当你的类中的成员为自定义类型时,假如这个自定义类型内部没有默认构造函数,那么你当前的类就无法生成默认生成的默认构造函数,但是如果你手动写构造函数,只能写无参或全缺省或自动生成的构造函数,那么我们要如何对一个自定义类型进行传入参数的初始化呢?这时候就要用到初始化列表。构造函数其实并不能称为类的初始化函数,它更像一个赋初值函数,同一个成员在构造函数中可以多次赋值,而初始化只能初始化一次,使用初始化列表更加符合我们对初始化的定义,列表中任何一个成员只能出现一次。3.自定义类型成员(该类没有默认构造函数).....

2022-08-06 17:49:42 3101 1

原创 最恶心的调试器gdb入门

对于习惯了vs调试的人来说,使用gdb简直是一种折磨...

2022-07-31 10:32:01 252

原创 一文学会操作vim所需要的最少指令

vim复杂的命令界面一直是很多人学习vim这款工具的绊脚石,今天通过这篇文章,轻松学会vim的基础操作吧!

2022-07-23 16:44:57 177

原创 C++中看不见的小精灵——this指针

你有没有想过,函数的参数没有对象,函数是如何确认要操作的对象的呢?

2022-07-23 14:54:40 184

原创 一文看懂内联函数

一文带你弄懂内联函数本质

2022-07-20 11:01:08 82

原创 简单易懂的C++特性入门

c++的基础特性学习,打开学习新思路

2022-07-20 10:18:32 124

原创 C语言预处理指令详解

1.预处理符号 FILE //进行编译的源文件 LINE //文件当前的行号 DATE //文件被编译的日期 TIME //文件被编译的时间 STDC //如果编译器遵循ANSI C,其值为1,否则未定义 #define #define 定义标识符 #define MAX 1000 在define定义标识符的时候,不要在最后加上 ; #define 定义宏 #define 机制包括了一

2022-04-21 08:42:11 400

原创 一文看懂程序底层实现逻辑(一)

1.翻译环境,在这个环境中源代码被转换为可执行的机器指令 2.执行环境,它用于实际执行代码​​组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code) 每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序​​1. 预处理 选项 gcc -E test.c -o test.i 预处理完成之后就停下来,预处理之后产生的结果都放在test.i文件中 2. 编译 选项 gcc -S test.c 编译完成之后就停下来,结果保存在test.s中

2022-04-12 17:15:23 2264

原创 一文弄懂动态内存开辟函数

1.malloc void *malloc( size_t size ); 开辟成功,则返回一个指向开辟好空间的指针,要根据赋值指针转换类型 开辟失败,则返回一个NULL指针,因此要检查malloc返回值 若参数 size 为0,malloc的行为是标准是未定义 free void free( void **memblock* ); 专门是用来使动态内存的释放和回收 如果参数指向的空间不是动态开辟的,那free函数的行为是未定义的

2022-03-30 11:29:02 96

原创 【计算机史】早期人类的重要计算工具科普

1.算盘 算盘发明于“美索不达米亚”,在公元前2500年 算盘用于计算,储存数据 算盘的发明代表了社会生产力的发展 1.1算盘的计算规则 每10进1,移动上层珠子完成进位 2.布进计算器 由多个齿轮组成,每个齿轮有10个齿,代表0~9 当一个齿轮转到9,会再转回0,并使后一个齿轮进1 可以多次减法实现除法,多次加法实现乘法 计算结果慢,手工制作造价昂贵 3.计算表+将一些难以心算的值记录在表格中...

2022-03-29 08:24:23 2961

原创 【计算机史】三种经典控制硬件

1.1继电器 利用控制电路通电放电控制继电器线路是否连通 可以连接马达和制表机 无法快速开关,一般一秒50次,计算速度慢,损耗率高 1.2电子管 真空管内有两个电极,一个加热释放电子,一个带正电吸引电子,形成电流 初期电子管电流只能单向流动,称为二极管 科学家在两电极中间增加一个控制电极,从而控制电子管开关 真空管造价昂贵,易损坏,早期在政府电脑中使用 1.3晶体管 晶体管有两个电极,中间用...

2022-03-29 08:20:57 132

原创 结构体初级与进阶详解(包会)

1.结构体声明struct tag{member-list;}variable-list;还可以采用匿名声明,如:struct{int a;char b;float c;}x;struct{int a;char b;float c;}a[20], *p;采用匿名结构体,该结构体只能调用一次。3.结构体自引用struct Node{int data;struct Node* next;};通过指针找到下一个数据。4.结构体初始化(常规初

2022-03-26 22:50:54 794

原创 str系列函数详解(包会)

1.strlen字符串向后依次遍历,直到找到'\0'为止,返回数字不计入'\0'。2.strcpy输入两个字符串作为参数,例如strcpy(arr1,arr2),函数将arr2中的每个字符依次替换掉arr1中的字符,直到arr2中出现‘\0'为止。3.strcat向字符串1结尾追加字符串2的内容,字符串1本身的0会被2中的字符替换掉,并在追加结束后添加0。4.strcmp依次逐个字符比较两个字符串的ascii值,arr1大于arr2返回一个大于0的数,等于返回0,小于返回一个小于

2022-03-24 16:52:16 4612

原创 数据的存储(正序and倒序区分)

一些前置概念......原码直接将二进制按照正负数的形式翻译成二进制就可以。反码将原码的符号位不变,其他位依次按位取反就可以得到了。补码正数的原、反、补码都相同。对于整形来说:数据存放内存中其实存放的是补码。在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。什么大端小端:大端(存储)模式,是指数据的低位保存在内存的高..

2022-02-26 22:39:21 1040 1

原创 100行代码畅玩扫雷(基础版)

利用模块化函数和宏定义,轻易实现棋盘的改动,令游戏更具有可玩性。//game.h#include<stdio.h>#include<time.h>#include<stdlib.h>#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define ezcount 10void qpcsh(char arr[ROWS][COLS], int ro

2022-01-24 13:05:46 2322

原创 0基础也能编程井字棋?教程来了

1.制作框架2.利用函数以及循环完成井字棋的编程3.开始和呆呆的机器人下棋吧//game.h#define row 3#define col 3#include<stdlib.h>;#include<time.h>#include<Windows.h>void qpcsh(char arr[row][col], int a, int b);void qpprint(char arr[row][col], int a, int b);vo

2022-01-22 13:42:35 306

原创 年轻人的第一篇CSDN博客

大家好,我是kokiaz,一个来自广东的大学生,因为一次志愿填报事故,我去到了广东的一间医科大学,这完全不符合我对大学的要求,大一的第一个学期里,我有些自暴自弃,必修课选择性不听,选修课选择性听哈哈,虽然在期末考试我的成绩依然比较考前,但我知道这不是我该走的路。我需要自救,我需要突破现在的困境!我开始寻找方法,我先是打算跨学校跨专业考研,而后经过几个读计算机系的高中同学介绍,我开始接触到c语言,我购买了一些c语言教材以及从网络搜集了一些公开课,从此正式开始了我的编程之旅。我计划用一个寒假完全学懂c语

2022-01-11 21:03:38 232

空空如也

空空如也

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

TA关注的人

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