- 博客(33)
- 收藏
- 关注
原创 Linux基础指令
并且保持着快速的增长率。·Torvalds于10月5日发布的这个Linux版本被称为0.02版,它能够运行GNU Bourne Again Shell和GUN的C编译程序以及为数不多的其他语言,Torvals绝对没有想到他设想的一种能够针对高级业余爱好者和黑客们的操作系统已经产生,这就是人们所称的Linux。据权威部门统计,目前Linux在服务器领域已经占据75%的市场份额,同时,Linux在服务器市场的迅速崛起,已经引起全球IT产业的高度关注,并以强劲的势头成为服务器操作系统领域中的中坚力量。
2025-11-09 19:58:34
523
原创 排序问题详解
当插入第i(i>=1)个元素时,前面的array[0],array[1],...,array[i-1]已经排好序,此时用array[i]的排序码与array[i-1],array[i-2],...的排序码进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移。稳定性:假定在待排序的记录序列中,存在多个具有相同使得关键字的记录,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;
2025-10-23 17:59:31
583
原创 vector
vector文档介绍使用STL的三个境界:能用、明理、能扩展构造函数声明接口说明vector(重点)无参构造构造并初始化n个val(重点)拷贝构造使用迭代器进行初始化构造。
2025-10-15 18:35:56
1172
原创 模板初阶介绍
class 类模板名// 类内成员定义// 类模版public:_size = 0;// 模版不建议声明和定义分离到两个文件.h 和.cpp会出现链接错误,具体原因后面会讲// 扩容++_size;
2025-10-01 13:59:52
394
原创 string类的用法
在构造时,将资源的计数给成1,每增加一个对象使用该资源,就给计数增加1,当某个对象被销毁时,先给该计数减1,然后再检查是否需要释放资源,如果计数为1,说明该对象是资源的最后一个使用者,将该资源释放;~对于一个由范围的集合而言,由程序员来说明循环的范围是多余的,有时候还会容易犯错误。C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神还可能会越界访问。
2025-09-27 18:42:01
1046
原创 C++内存管理
int main()// new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数free(p1);delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;
2025-09-05 20:40:52
1084
原创 二叉树详解
设二叉树的根结点所在层数为1,层序遍历就是从所在二叉树的根结点出发,首先访问第一层的树根结点,然后从左到右访问第二层上的结点,接着是第三层的结点,以此类推,自左至右逐层访问树的结点的过程就是层序遍历。对于深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。因此,树是递归定义的。根结点的左子树和右子树分别是由子树结点、子树结点的左子树和右子树组成的,因此二叉树定义是递归式的,后续链式二叉树的操作中基本都是按照该概念实现的。
2025-09-02 13:18:42
1009
1
原创 类和对象详解
class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数~为了区分成员变量,一般习惯上成员变量会加一个特殊标识,如成员变量前面或者后面加_或者m开头,注意C++中这个并不是强制的,只是一些惯例。
2025-08-28 18:33:14
994
原创 C++入门基础
定义命名空间需要使用到nemespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。命名空间中可以定义变量/函数/类型等~namespace本质是定义出一个域,这个域跟全局域各自独立,不同的域可以定义同名变量,所以下面的rand不再冲突了~C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量/函数/类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。
2025-08-20 14:33:17
784
原创 栈和队列详解
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO。//队列有效元素个数。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。//队列为空,队头和队尾都是newnode。//获取栈中有效元素个数。//获取栈中有效元素个数。//定义队列结点的结构。//定义栈的数据结构。
2025-08-13 11:54:21
952
原创 顺序表和链表
线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串....概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。3、从堆上申请来的空间,是按照一定策略分配出来的,每次申请的空间可能连续,可能不连续。与顺序表不同的是,链表里的每一个小单元都是独立申请下来的空间,我们称之为“结点”//在pos位置之后插入数据(和在pos位置之前插入基本是一样的)顺序表的底层结构是数组,对数组的封装,实现了常用的增删查改等接口。
2025-08-13 11:31:48
988
原创 算法复杂度
实际中我们计算时间复杂度时,计算的也不是程序的精确的执行次数,精确执行次数计算起来还是很麻烦的(不同的一句程序代码,编译出的指令条数都是不一样的),计算出精确的执行次数意义也不大,因为我们计算时间复杂度只是想比较算法程序的增长量级,也就是当N不断变大时T(N)的差别,当N不断变大变大时常数和低阶项对结果的影响很小,所以我们只需要计算程序能代表增长量级的大概执行次数,复杂度的表示通常使用大O的渐进表示法。比如解决一个问题的算法a程序T(N),算法b程序T(N)=N^2,那么算法a的效率一定优于算法b。
2025-08-05 15:08:14
917
原创 预处理详解
C语言设置了一些预定义符号,可以直接使用,预定义符号也是在预处理期间处理的。基本语法:举个例子:case思考:在define定义标识符的时候,要不要加上;建议不要加上,这样容易导致问题,if后只有一条语句,没有大括号就会出现语法错误#define机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏或定义宏下面是宏的申明方式:举例:int main()int x = 5;return 0。
2025-08-01 11:42:02
882
原创 编译和链接
在编译器编译的时候并不知道函数和变量的地址,所以暂时把调用函数的指令的目标地址和变量的地址搁置。等到最后链接的时候由链接器根据引用的符号(函数名)在其他模块中查找函数的地址,然后将.c中所有引用到函数的指令重新修正,让他们的目标地址为真正的函数的地址。这个过程是递归进行的,也就是说被包含的头文件也可能包含其他文件。~注:在windows环境下的文件目标文件的后缀是.obj,linux环境下目标文件的后缀是.o。将源代码程序输入到扫描器,扫描器的任务就是简单的进行词法分析,把代码中的字符分割成一系列的记号。
2025-07-31 14:17:37
864
原创 文件操作详解
磁盘上的文件是文件。但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)上面说的是适用于所有输入流一般指适用于标准输入流和其他输入流(如文件输入流);所有输出流一般指适用于标准输出流和其他输出流(如文件输出流)。
2025-07-31 13:16:56
834
原创 动态内存管理
1.栈区: 在执行函数时,函数内局部变量的储存单元都可以在栈上创建,函数执行结束时这些储存单元自动被释放。栈内存分配运算内置于处理器,指令集中,效率很高,但是分配的内存容量有限。
2025-07-28 19:16:21
1141
原创 自定义类型:联合和枚举
联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初始值。~当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍。像结构体一样,联合体也是由一个或者多个成员构成,这些成员可以是不同的类型。代码的三个地址一模一样,i的第四个字节的内容被修改为00了。{}中的内容是枚举类型的可能取值,也叫枚举常量。~联合体的大小至少是最大成员的大小。
2025-07-28 11:20:46
985
原创 自定义类型:结构体
位段的声明和结构是类似的,有两个不同:1.位段的成员必须是int、unsigned int或signed int,在C99中位段成员也可以选择其他类型2.位段的成员后边有一个冒号和一个数字比如:struct Aint _a : 2;int _b : 5;
2025-07-27 13:53:30
843
原创 数据在内存中的存储
首先,将9的二进制序列按照浮点数的形式拆分,得到第一位符号位s=0,后面8位的指数E=00000000,最后23位的有效数字M=000 0000 0000 0000 0000 1001由于指数E全为0,所以符合E全为0的情况。在计算机系统中是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8个bit位,但在C语言中还有别的类型,另外对于位数大于八位的处理器,寄存器的宽度大于一个字节,必然存在着如何将多个字节安排的问题。同时,加法和减法也可以统一处理,此外,补码与原码相互转换,其运算过程是相同的。
2025-07-27 11:12:56
816
原创 C语言内存函数
函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。~和memcpy的差别就是memmove函数处理的源内存块和目标内存块是可以重叠的。~如果source和destination有任何的重叠,复制的结果都是未定义的。memset是用来设置内存的,将内存中的值以字节为单位设置成想要的内容。~比较从ptr1到ptr2指针指向的位置开始,向后的num个字节。\\memcpy函数只负责处理内存不重叠的情况。~这个函数在遇到'\0’的时候不会停下来。
2025-07-19 16:50:46
822
原创 深入理解指针
如果明确知道指针指向哪里就直接赋值地址,如果不知道指针应该指向哪里,可以给指针赋值NULL.NULL是C语言中定义的一个标识符常量,值是0,0也是地址,这个地址是无法使用的。上述代码中的n是不能被修改的,其实n本质是变量,只不过被const修饰后,在语法上加了限制,只要我们在代码中对n进行修改,就不符合语法规则,就报错,致使没法直接修改n。数组在传参的过程中传递的是数组首元素的地址,所以函数形参部分理论上因该使用指针变量来接收首元素的地址,因此sizeof计算的是一个地址的大小,而不是数组的大小。
2025-07-13 12:37:59
624
原创 操作符详解
struct B//变量的定义char c;int m;p1//声明类型的同时定义变量p1struct Stuint age;//结构体嵌套定义int main()struct Stu s1 = { "张三",20,{'q',100}//结构体嵌套初始化,95.5f };//初始化指定顺序初始化return 0;
2025-07-03 21:55:55
593
原创 函数的递归
递归存在限制条件,当满足这个限制条件的时候,递归便不再继续。直到被打印的数字变成一位数的时候,就不需要再拆分,递归结束。如果不想使用递归的方式,通常会使用迭代的方法。递归的方式计算量太大,最好使用迭代的方法。递归中的递是递推的意思,归是回归的意思。函数在递归过程中,会浪费太多的栈帧空间。在C语言中,递归就是函数自己调用自己。如果n是一位数,n的每一位就是n自己。递归的思考方式就是把大事化小的过程。递归在书写的时候,有2个必要条件。当n过大时,会有栈溢出的现象。2.1举例1:求n的阶乘。
2025-06-29 23:54:04
445
原创 VS实用调式技巧
在电脑系统或者程序中,隐藏着一些未被发现的缺陷或者问题,简称程序漏洞当在程序中发现存在的问题,下一步就是找到问题,并修复问题找问题的过程称为调式,英文为degug。
2025-06-28 16:02:27
637
原创 数组和函数实践:扫雷游戏
printf("很遗憾,你被炸死了\n");printf("非法输入,请重新输入\n");printf("输入错误,请重新输入\n");把除10个雷之外的所有非雷找出来,排雷成功,游戏结束。printf("恭喜你,成功游戏\n");为了防止信息混淆,设计两个棋盘,一个用来布置雷,一个用来排查雷。printf("退出游戏\n");~如果排查位置不是雷,周围也没有雷,可以展开周围的一片。如果位置不是雷,就显示周围有几个雷。printf("请输入:\n");printf("请选择:");9*9,10个雷(简单)
2025-06-27 19:34:32
507
原创 函数的基本概念
ret_type fun_name(形式参数)~ret_type是函数的返回类型~fun_name是函数名~括号中放的是形式参数~{}括起来的是函数体函数的调用一定要满足:先声明后使用函数定义也是一种特殊的声明,所以函数定义放在调用之前也是可以的。
2025-06-26 21:52:41
1045
原创 数组的基本概念
type指定的是数组中存放的数据,可以是:char、short、int等,也可以是自定义类型。存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。在数组创建的时候,给定一些初始值,就叫做初始化,初始化时将数据放在大括号中。计算元素个数的方法:sizeof(arr)/sizeof(arr[0])C99中给的一个变长数组的新特性,允许使用变量指定数组的大小。~数组中存放的是1个或者多个数据,但是数组元素个数不能为0。~[]中的常量值是用来指定数组的大小的,根据实际的要求指定。
2025-06-26 20:47:20
736
原创 分支和循环
练习:输入一个人的年龄,如果年龄<18,打印“少年”,如果年龄在18至44岁之间,打印“青年”,如果年龄在45至59岁打印“中老年”,如果年龄在60至89岁之间打印“老年”,如果90岁及以上打印“老寿星”在do while循环中,先执行语句,执行完语句后,再去执行判断表达式,判断结果如果不等于0,则继续执行循环语句,判断结果如果是0,则循环结束。在do while循环中,先执行语句,执行完语句后,再去执行判断表达式,判断结果如果不等于0,则继续执行循环语句,判断结果如果是0,则循环结束。
2025-06-24 19:33:50
1021
原创 数据类型和变量
signed] char有符号的unsigned char无符号的作用是将参数文本输出到屏幕上,f代表format(格式化),表示可以定制输出文本的格式不会自动换行,换行需要加上\n使用前要使用头文件#include<stdio.h>
2025-05-30 15:28:22
1137
原创 C语言常见概念
在VS上写代码的步骤1.创建项目2.创建源文件3.开始写源文件:.c为后缀头文件:.h为后缀C语言中一批保留名字的符号关键字都有特殊的意义函数名不能和关键字重复关键字不能自己创建。
2025-05-21 16:26:08
585
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅