- 博客(36)
- 收藏
- 关注
原创 Linux权限---用户权限切换与文件权限更改(附目录,哪里不懂点哪里)--- 第一期
1. Linux权限的概念1.1 什么是权限1.2 所以权限的操作一共分为两类1.3 Linux中,默认有两类用户2. root与普通用户切换指令2.1 如果想从普通用户转为超级用户可以进行下面操作2.2 如果想从超级用户转为普通用户可以进行下面操作2.3 禁止来回切换用户3. 某条指令利用root权限4. Linux中的用户类别4.1 用户类别5. 文件类型5.1 文件类型标识符5.2 文件中对不同操作者的权限6. 文件权限值的表达方式6.1
2022-12-15 01:36:50
2147
原创 string类 --- 第八期
C语言中,字符串是以'\0'结尾的一些字符的合集,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。5. 注意,这个类独立于所使用的编码来处理字节,如果用来处理多字节或变长字节或长字符,这个类的所有成员(如长度或大小)以及它的迭代器,将仍然按照字节(而不是实际编码的字符)来操作。3. string类是使用了char(即作为它的字符类型,使用它的默认char_traits和分配器类型)
2022-12-12 20:06:37
188
原创 explicit关键字 static成员 C++ 的成员初始化新玩法 友元 --- 第七期
声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;如果一个类定义在另一个类的内部,这个内部类就叫做内部类。注意此时这个内部类是一个独立的类,它不属于外部类,更不能通过外部类的对象去调用内部类。注意友元类的定义,内部类可以通过外部类的对象参数来访问外部类中的所有成员。C++中explicit关键字只能修饰类中的只有一个参数的构造函数,它的作用是表示该构造函数是显示的而非隐式的。• 友元类的所有成员函数都可以是另一个类的友元函数,都可以访问另一个类中的非公有成员。
2022-12-10 18:25:55
172
原创 C++运算符重载 赋值运算符重载 --- 第六期
C++为了增强代码的可续性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。函数名字为:关键字operator后面接需要重载的运算符符号。函数原型:返回值类型 operator操作符(参数列表)我们在类中定义函数,并且其中参数发生了改变,因为这是在类内部,所以类中函数的参数中会有个隐式参数this,而我们不能破坏原符号的含义,像>符号只能有两个参数进行比较,所以我们只填写一个参数就够了。注意:总结一下:默认生
2022-12-08 00:26:06
336
原创 C++类和对象 构造函数 析构函数 拷贝构造函数 (类的6个默认成员函数 --- 上)---第五期
如果一个类中什么成员都没有,简称为空类,空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成6个默认成员函数。 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次构造函数是特殊的成员函数,需要注意的是,构造函数虽然名称叫构造,但是构造函数的主要任务并不是开辟空间创建对象,而是初始化对象。其特征如下: 通过调试可以看出,类中的内置类型假如没有构造函数,是不会初始化的。而自定义类型
2022-12-07 13:36:53
149
原创 C++类和对象(浅识) --- 第四期
1. 面向过程和面向对象初步认识2. 类的引入3. 类的定义4. 类的访问限定符及封装4.1 访问限定符4.2 封装5. 类的作用域6. 类的实例化7. 类对象模型7.1 如何计算类对象的大小7.2 类对象的存储方式
2022-12-06 20:04:04
143
原创 女票刷剧中,弄点C++基础(精华满满)--- 第三期
通过上一期的介绍,现在我们创建好新项目后首先需要干这几件事 上一期我们讲到了cout,endl,cin,但我们并不一定要使用它,在C++中,C++与C是兼容的比如下面这个案例: 假如我们的结构体中的成员更多,那么C++会更加麻烦,所以我们哪个方便就用哪个。下面进入正题缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时,如果没有指定实参则采用该形参的缺省值,否则使用指定的形参。3.2 缺省参数分类• 全缺省参数(每个参数都指定缺省值)•半缺省参数(缺省部分参数,必须从右往左缺
2022-12-06 00:53:21
303
原创 趁着室友不在家,激情初识C++(C++入门)--- 第一期
c语言是结构化和模块化的语音,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,c语言则不合适。为了解决软件危机,20世纪80年代。计算机界提出了OOP(object oriented programming: 面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在c语言的基础上引用并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与c语言的渊源关系,命名为C++。
2022-12-01 14:23:23
201
原创 七大排序详细拆分讲解---第十四期(完结篇)
它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。:假定在待排序的记录序列中,存在多个具有相同关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;:所谓排序,就是使一串记录,按照其中的某个关键字的大小,递增或递减的排列起来的操作。
2022-11-27 23:54:41
319
原创 二叉树---第十三期
方式1:假设说明了树的度为N{int data;}这种写法有两大缺陷:1、可能会存在不少空间浪费2、万一没有限定树的度为多少呢?SeqList s;}缺点:结构相对复杂方式3:结构数组存储(双亲表示法){int data;}上面的方式各有优缺点树结构最优方法:左孩子右兄弟表示法//左孩子右兄弟表示法{//永远指向第一个孩子//指向孩子右边的亲兄弟}
2022-11-04 21:14:22
188
原创 队列---第十二期
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out)入队列:进行插入操作的一端称为队尾出队列:进行删除操作的一端称为队头队列选择链式。
2022-11-03 13:59:08
130
原创 栈---第十一期
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。。栈中的数据元素遵守先进后出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,出栈:栈的删除操作叫做出栈。那么是数组栈更加方便还是链表栈呢?数组栈只有一个缺点,就是需要增容,容易浪费空间。如果用尾做栈顶,尾插尾删,要设计成双向链表,否则删除效率低。如果用头做栈顶,头插头删,就可以设计成单链表。
2022-11-02 22:23:14
126
1
原创 顺序表和链表的区别和cpu高速缓存命中率---第十期
假设一次加载20个字节,我们在使用顺序表和链表时,很有可能在访问当前位置后,访问下一个位置,顺序表是一块连续的内存,我们已经把0x00123400后20个字节都加载到缓存中了,我们连续访问,那么命中率是不是就比链表的高了。b) 为了避免频繁增容,一般我们都按照倍数去增,用不完可能存在一定的空间浪费。1、不支持随机访问。但加载到缓存时不是只加载一个地址,而是加载一块地址,地址的大小取决于内存。2、链表存储一个值,同时要存储链接指针,也有一定的消耗。2、连续的物理空间,空间不够了需要增容。
2022-11-02 14:06:31
227
原创 双链表的增删改查---第九期
双链表的优势在增删改查中淋漓尽致的展现了出来,这一切都取决于结构的优势。我们希望在链表的某个指定结点前面插入一个结点,双向链表比单链表有很大的优势。双向链表可以在 O(1) 时间复杂度搞定,而单向链表需要 O(n) 的时间复杂度。
2022-11-01 22:15:52
789
原创 链表的类型---第八期
对于单链表来说,哨兵位就是一个带头链表,有个专门的链表头结点,并不存储数据,链表的所有操作都不涉及头结点的操作,因此在插入删除节点的时候不需要判断链表是否为NULL,头插直接就往哨兵位后边插,尾插就遍历到末尾插。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了,后面我们代码实现了就知道了。头插:newnode->next = head->next;没有哨兵位其实也就是不带头,插入删除数据的时候需要判断链表是否为NULL,
2022-11-01 20:10:17
1121
原创 链表OJ题(2)---第七期
给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。你应当 保留 两个分区中每个节点的初始相对位置。示例 1:输入:head = [1,4,3,2,5,2], x = 3输出:[1,2,2,4,3,5]示例 2:输入:head = [2,1], x = 2输出:[1,2]提示:链表中节点的数目在范围 [0, 200] 内来源:力扣(LeetCode)
2022-10-30 22:44:41
724
原创 链表OJ题(1)---第六期
现在是想将链表倒转过来,我们首先把1当作尾节点指向NULL,之后再将2指向1,重复到5指向4但是单链表是不可逆,我们把1指向NULL时,接下来如何找到2呢?所以我们要创建一个变量,存储它下一个节点总共定义三个变量我们不要随便命名,每个变量最好的名字都是他们所代表的东西,让自己和别人都容易理解我们要将cur指向prev作为尾节点,,之后这三个变量都往后移一位循环往复,直到prev走到5了,那我们是不是就成功了呢?
2022-10-30 17:51:50
201
原创 链表(3)---第五期
并不推荐前插做法,因为单链表的缺点在单链表中实现过于麻烦,当我们学习到双链表的时候就能更好地解决这方面问题了。本期是将上次剩的接口实现。
2022-10-29 13:55:30
516
原创 链表(2)---第四期
这个多创建一个变量prev,最开始指向NULL,假如这个节点不是尾节点,那么prev赋值tail,tail赋值为下个节点。链表的特点是尾节点中next指向NULL,先定义一个指针指向头节点名为tail,如果tail中next不指向NULL,tail赋值为下个节点的地址。这是我们的逻辑图,我们要将p3删掉,那么我们就需要将p2中的next指向NULL,并且释放掉p3。相对于上一期的代码,我们添加了一个创建新节点的函数,避免重复打代码,方便使用。你已经找到了这个节点的地址,那么你还可以改变这个节点中的值。
2022-10-28 23:06:31
276
原创 链表(1)---第三期
上一期我们讲到了顺序表,但它的功能中存在一定的缺陷1、空间不够了需要增容,扩容是要付出代价的可能是原地扩代价低,也有可能是异地扩代价高2、避免频繁扩容,我们满了基本上都是扩2倍,可能就会导致一定的空间浪费3.顺序表要求数据从开始位置连续存储,那么我们在头部或者中间位置插入删除数据就需要挪动数据,效率不高针对顺序表缺陷,就设计出的链表。
2022-10-27 22:43:07
395
原创 顺序表 --- 第二期
线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表,链表,栈,队列,字符串...线性表在逻辑上是线性结构,也就是说是连续的一条直线。但在物理结构上并不一定是连续的,线性表在物理存储时,通常以数组和链式结构的形式存储。顺序表使用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。顺序表就是数组,但是在数组的基础上,它还要求数据从头开始存,并且是连续存储的,不能跳跃间隔。今天主要讲的是动态版本,这就需要你对动态内存空间,结构体和指针有一定的了解。
2022-10-26 13:06:26
287
1
原创 时间复杂度与空间复杂度---第一期
它定量描述了该算法的运行时间。一个算法执行所消耗的时间,从理论上来说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度,所以我们如今已经不需要再特别关注一个算法的空间复杂度。其实在经历上述学习后我觉得时间复杂度与高数中的极限有异曲同工之妙,这个N是趋近于无穷大的,所以所有的常数都可以忽略不计,N的系数也可以忽略不计,只求最高阶,毕竟这是一个估算。一个2的次方,增长起来是十分快的,假如有一百万个数,大概只需要20次就能查到!
2022-10-25 23:48:11
676
1
原创 开篇啦!
这是我数据结构专栏的第一篇文章,目的是为自身总结知识和分享知识,我会坚持每天都完成至少一篇。 也希望通过优快云找到能一起交谈学习的朋友,假如一个人学习寂寞快来私信我!这个专栏讲述的是C语言的数据结构,是一些比较基础的知识,帮助像我这种小白来浅识数据结构。 算法就是定义良好的计算过程,它去一个或一组的值为输入,并产生出一个或一组值作为输出。简单来说算法就是一系列的计算步骤,用来将输入数据转化成输出结果。 他们两个是互相关联的,有些数据结构需要算法,有些算法需要数据结构不多说,明天
2022-10-24 22:04:00
164
原创 开刷NewCode华为机试---第二期
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。数据范围: 1
2022-10-24 13:12:59
572
原创 开刷NewCode华为机试---第一期
输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。数据范围:保证在 32 位整型数字范围内
2022-10-24 12:14:00
358
原创 C语言---巧妙解决单身狗问题
从数组中第一个数开始,遍历整个数组,如果这个数出现过两次,则继续循环。那么将数组中所有的数分为两个数组,数组1存放这个位置为1得数,数组二存放这个位置为0的数。“ ^ ”的异或指的是二进制中,对应的对应二进制位相同时异或为零,相异时异或为一。只需要把每位数字异或一遍,出现过两次的数就会被消除,最终只留下出现过一次的数。这次单单全部异或可不能解决问题,那样只能得到这两个数异或的值。这样我们获得两个数组,每个数组分别有一个只出现过一次的数。再分别对这个数组异或,这样就能分别得到我们要的数了。
2022-10-23 11:38:21
537
3
原创 详细分析字符串函数(1): strlen,strcpy,strcmp
3.随后我们解引用这个指针看这个地址中存放的是否是我们的结束标志'\0',找到'\0'的地址位置。当然我们的一个字符串未知数量的字符,所以我们要用一个while循环,每次指针的位置后移一位。就是字符串结束标识符,在访问字符串的时候只访问到"\0"出现的位置,也为我们字符串函数功能的实现提供了帮助。但我们的首元素地址已经移到'\0'的位置,所以我们在开始的时候要用另一个指针来保存首元素地址,最后来相减。4.当我们找到'\0'的地址的时候,只要与传递字符串的首地址相减,就得到了字符串得长度。
2022-10-22 12:14:05
718
原创 指针的进阶
(*p)是指向二维数组arr的指针,[5]代表指针能指向每个数组5个元素,每个元素是int类型。int*代表的是这个指针指向的是int*类型的元素,*parr2代表的是parr2是一个指针。数组传参的时候,传递的是首元素地址。那么函数接收参数的时候,是不是可以用指针来传递呢?int** parr2可以分解为((int*) (*parr2))来解释。假如你知道了元素的总数,只知道它的行数的话那么,那么数组的列数就无法统一。传过来的地址是二维数组第一行的地址。其中二维数组的行是可以省略的。
2022-10-09 23:27:00
65
原创 杨辉三角C语言
拥有以上思路就可以进行C语言编写了。首先我们要先了解什么是杨辉三角。每个数等于其上方两个数的合;一共有n行,每行有n个数;每行的两侧都等于1;
2022-10-05 22:35:55
273
原创 初识结构体
如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销表比较大,所以会导致性能的下降。结构是一些值得集合,这些值称为成员变量。结构得每个成员可以是不同类型的变量。. 结构体变量.结构体成员。-> 结构体指针->结构体成员。Stu可以直接定义结构体变量,等于struct Stu。结构体成员可以是标量,数组,指针,甚至是其他结构体。print1传参的时候,参数是需要压栈的。结构体变量的定义和初始化。推荐使用print2。
2022-09-29 08:46:23
64
原创 初识初阶指针
概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)2.平时说的指针,通常指的是指针变量,是用来存放地址的变量。指针的大小在32位平台是4个字节,在64位平台是8个字节。总结:指针就是地址,口语中常说的指针通常指的是指针变量。指针类型决定了,指针在被解引用的时候,访问的权限。指针类型决定了,指针向前或者向后走一步,走多大距离。1.指针是内存中一个最小的单元编号,也就是地址。整型指针解引用访问了4个字节。字符指针解引用访问了1个字节。指针-指针 得到的是指针。
2022-09-27 15:16:11
121
原创 内存的三种区域
在函数之外定义的变量,可以用在整个代码中任意一个地方使用。生命周期也是整个程序的生命周期。假如全局变量与函数内定义的局部变量名称相同,那么在函数内优先使用局部变量。在任何一个函数中定义的变量(未加static修饰),生命周期短,在自身所在的作用域中起作用,存储在栈区,使用完立刻释放。由static定义,使局部变量变为静态局部变量,即使使用完也不会初始化。开始时初始化,作用域为局部作用域,在函数结束时,其作用域也结束。变量分为局部变量、静态变量、全局变量。
2022-09-06 09:02:59
153
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅