- 博客(26)
- 收藏
- 关注
原创 AVL树的插入实现
首先需要有节点然后需要组织链式结构,所以定义下面两个类。AVL树的左右子树高度差不超过1,左右子树也为AVL树,当AVL树不平衡时需要将对不平衡的部分进行旋转变得平衡,下面介绍怎么旋转。
2023-09-20 19:26:10
79
原创 map与set的使用
我们一开始接触的STL容器例如:vector,list,queue等这些容器统称为序列式容器,因为这些容器的底层为线性的数据结构,里面存储的是元素本身。也是用来存储数据的,不同的是里面。
2023-09-18 22:24:05
98
原创 linux中的动静态库
我们平常使用的C\C++语言标准标准库,我们只是包含了库的头文件就可以使用,要想使用库的内容,必然要使我们编写的代码和库内容进行关联,我们的源文件变为可执行文件要经过预处理-编译-汇编-链接阶段。其中的链接阶段,有两种关联方式,一是动态链接(动态库),而是将静态库的相应代码加载的可执行文件中(静态库)
2023-09-08 18:42:38
97
原创 C++中的多态
构成虚函数的重写父类指针或者引用调用虚函数首先是作用域的区别,重载是在同一作用域,重写与隐藏都是在不同的作用域(两个函数分别在基类和派生类的作用域)。其次是重载函数名相同,而参数三不同(个数,类型,顺序)。重写函数名\返回值\参数相同(协办例外),而且两个函数必须是虚函数。隐藏只需要函数名相同,如果函数名相同但是不构成重写便是隐藏关系。可以说重写是一种特殊的隐藏关系。给出下图方便对比。
2023-09-03 17:23:25
59
原创 制作一个小型xshell
首先需要知道的是xshell是一个外壳程序,它运行起来直到用户退出才会停止,所以开始直接设置一个死循环。然后按照下面的步骤。
2023-08-26 10:21:19
146
原创 进程地址空间详解
实际上我们这里所说的地址空间都是虚拟的地址空间,而不是真正的物理内存,为什么呢下面给出一个实例。这个进程使用fork()函数创建了一个子进程,当创建子进程成功时frok函数返回子进程的pid号给父进程,返回0给子进程。你没听错这里fork返回了两个值给ret(后面会解释)。int main()printf("子进程创建失败\n");return 1;return 0;这段代码运行结果如下。
2023-08-24 18:40:29
140
1
原创 Linux进程id与状态
当父进程结束时,init 进程会很善良地把那些僵尸进程领养过来,并合理的回收它们的资源,那些僵尸进程就得到了妥善的处理了。当进程需要等待某种特定资源(例如从磁盘读取数据),便进入睡眠状态(有两种睡眠状态),处于可中断等待态的进程则可以被信号唤醒,如果收到信号,该进程就从等待状态进入可运行状态,并且加入到运行队列中,等待被调度。cpu需要一个个将进程加载然后运行,所以需要一个进程队列来管理进程运行先后,进程处于这个运行队列,此时便是运行状态(所以运行状态的进程不一定在运行中,也可能在等待运行)
2023-08-21 22:42:16
168
1
原创 linux调试器-gdb的使用
我们在Linux下使用gcc/g++编译出来的程序在默认情况下release版本,要想调试则需要生成debug版本才能使用gdb调试。(命令格式如下:加上-g则表示生成debug版本)gcc -o 你想要生成的可执行文件的名字 你编写的代码文件 -g。
2023-08-20 19:45:49
89
1
原创 Linux的粘滞位与vim的使用
vim只是一个文本编辑器,类似于我们电脑上的记事本,只负责写代码,但和记事本不同的是vim有不同的模式。vim的使用格式为:vim 要打开的文本。
2023-08-19 11:11:55
82
原创 C++中的继承
C++的语法复杂,继承就是一个体现。有多继承,所以就有菱形,那就有了菱形虚拟继承,底层的实现就很复杂。多继承可以认为是C++的缺陷之一。
2023-08-14 22:20:29
164
原创 C++入门
//类体由成员函数和成员变量组成};//后面有分号class为定义类的关键字,classname为类名,{}中为类的主体,注意定义结束时有分号。类中元素为类的成员类中的数据被称为类的属性或者成员变量,类中的函数被称为类的方法或者成员函数。类的两种定义方式声明和定义都放在类体中,(注意如果成员函数在类中定义,编译器可能会将其当为内联函数处理)。所以小函数,想成为内联函数的,直接在类里面定义,如果是大函数,声明定义分离。声明放在.h文件,类的定义放在.cpp文件中。......
2022-07-18 09:12:54
215
原创 C++入门
下面是我们C++刚入门就会写的一个打印hello world的简单程序,很多人不知道为什么要这么写首先我们需要了解命名空间这个概念我们在使用C语言时知道不能定义和库函数同名的变量,这就导致我们在做项目时如果需要和其他人共同完成时容易产生同名变量导致程序无法正常链接起来,C++为了弥补这个缺陷,便有了命名空间。下面是对命名空间的使用:(下面的::符号是域作用限定符,当::前面没有指定域即为空白时,表示为全局)不过对于命名空间内变量的使用需要频繁的使用域作用限定符::,会感觉很麻烦,如果使用usin
2022-07-11 17:29:34
145
原创 队列的实现
一、什么是队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。二、队列的实现队列可以使用链表和数组实现,但是使用链表更优一些,因为出队列时,数组方式需要将后面的数据覆盖到前面来,效率较低。所以下面我们使用链表是实现队列。我们首先需要使用结构体定义出节点的类型,然后定义队列的结构包含一个队头节点,和队尾节点。(队尾节点用于插入数
2022-05-19 15:49:07
1526
原创 程序环境和预处理
1.程序的翻译环境与执行环境在ANSI C的任何一种实现中,存在两个不同的环境。第一种是翻译环境,在这种环境中源代码转换为可执行的机器指令(二进制指令)。第二种是执行环境,它用于实际执行代码。翻译环境(通常指编译器)其实就是将源程序翻译为可执行程序,执行环境是用来执行代码的(通常指操作系统)。1.1编译本身分为几个阶段:如下图:...
2022-04-16 23:14:08
411
原创 C语言关于文件操作
1.为什么使用文件我们都知道在写一些c语言程序时,我们涉及到数据的存储问题,每当我们退出程序,数据便不存在了。每次重新录入数据让我们感到不便。而我们需要保存输入的数据这便涉及到了数据的持久化的问题。而持久化的方法有,把数据放在磁盘文件,存放到数据库等。使用文件我们可以将数据存储到电脑硬盘上做到数据持久化。2.什么是文件磁盘上的文件是文件,在程序设计中我们谈到的一般是程序文件、数据文件(从文件功能的角度分类)。2.1...
2022-04-11 16:55:39
1389
原创 动态内存管理
1.为什么要存在动态内存分配int val = 20;//在栈空间开辟4字节char arr[20] = {0};//在栈空间开辟20字节上述开辟空间的方式的特点为:1.开辟的空间大小是固定的.2.数组在声明时必须指定数组长度,它所需要的内存在编译时分配.但是在实际应用中我们往往不知道我们需要多大的空间才足够我们使用,太大导致空间浪费,太小不够使用.这个时候只能试试动态内存开辟了.首先我们需要知道动态内存管理都是在堆区开辟空间的如下图2.动态内存函数的介绍2.1m
2022-04-02 23:26:52
435
原创 结构体,枚举与联合体
结构体 结构体声明 匿名结构体(只能使用一次,即只能在一开始的时候创建结构体变量) 对匿名结构体不能使用类型重命名即(typedef)例如:下图代码是错误的 结构体的自引用 结构体内存对齐 s1大小为12字节,s2大小为8字节结构体的大小(首成员直接存入0偏移量处)先是比较成员的大小与编译器默认对齐数的大小,取较小值为对齐数,将该成员存入为对齐数倍数的偏移量处,最后结构体大小为最大对齐数(每个成员对齐数中的最大值)的倍数.例如s1:c1直接存入0偏
2022-03-28 15:05:22
240
原创 字符串&内存函数
1.strcpy2.strncpy3.strcat4.strncat5.strlen6.strstr7.strcmp8.strtok内存函数字符串函数1.strcpy函数名: strcpy功 能: 将src字符串拷贝至dest所指的地址用 法: char *strcpy(char *dest, const char *src);返回值: 返回参数dest的字符串起始地址strcpy将src字符串结尾'\0'一同复制到de...
2022-03-28 12:40:02
404
原创 数据的存储
原码反码补码正数的原码反码补码相同负数的原码反码补码不同(反码等于符号位不变其他位按位取反,补码等于反码+1)补码变为原码有两种方式补码减一符号位不变其他位按位取反 补码符号位不变其他位按位取反加一整型提升当你使用printf打印一个数时可能会根据打印的格式对数据进行整型提升例如printf中使用unsigned的格式打印char类型的数据假如char类型的数据为负一则打印出来的数将会是一个很大的数字而不是负一.(整型提升的方式是根据变量本身的类型决定的和打印类型无关)具体步骤如..
2022-03-06 10:30:42
55
原创 实现扫雷小游戏
和上次一样我先简单叙述设计小游戏的逻辑,然后展示代码实现过程.游戏逻辑扫雷游戏由于我们需要一个展示界面,然后将雷的数量显示出来,如果用一个二维数组,雷和雷的数量容易冲突代码也较难实现,所以使用两个二维数组,一个存放雷的信息,一个用于展示给玩家.随后将两个数组初始化为我们想要的字符就行了.然后将游戏界面打印出来,这里我们只打印9*9的界面,由于我们排查雷时可能要判断数组越界导致我们代码变得复杂,所以我们可以用11*11的数组来存放,但是只打印9*9的界面,最后我们写一个循环遍历我们输入坐标的周围即可找
2022-01-23 11:14:55
2512
原创 用C语言写三子棋小游戏
目录小游戏实现逻辑源码测试游戏逻辑游戏函数实现头文件用C语言写写小游戏不仅能增加我们对编程的兴趣,也能巩固我们C语言的基础知识,下面是我完成这个小游戏的逻辑.小游戏实现逻辑首先我们需要打印出游戏菜单,其次三子棋游戏需要存储我们输入棋子的数据并且打印出一个棋盘,所以我们先创建一个二维数组用于存储数据以及打印棋盘使用.然后将数组初始化为字符空格这样打印出来的棋盘才会显示为空.有了棋盘下一步便是下棋了,先是玩家下棋,这里需要判断下棋的坐标是否合法(下的棋的坐标有没有超出坐标范围)并
2022-01-22 13:48:13
2310
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人