- 博客(68)
- 收藏
- 关注
原创 Linux笔记---Linux权限理解
在Linux下,多个用户可以同时登录一台主机。用ls -l指令可以看到如下的文件属性:这些文件属性表示的含义如下图:所属用户即拥有者,所属用户组即所属组。例如上图中,所有文件的拥有者和所属组都是root。除了这两种人以外的所有用户都是other,所以不需要记录other。
2024-09-27 19:49:36 900 22
原创 C++笔记---set和map
关于set的使用,将其当作key搜索场景的红黑树来使用即可。类型参数分别为:key的类型,比较器(通过仿函数实现,默认为小于比较,中序遍历得到升序序列),内存池。一般来说,后两个参数有缺省值,的使用频率较低,我们在日常使用的过程中只需要传入第一个参数即可。,关于map的使用,将其当作key/value搜索场景的红黑树来使用即可。类型参数分别为:key的类型,value的类型,比较器(通过仿函数实现,默认为小于比较,中序遍历得到升序序列),内存池。
2024-09-23 17:58:43 968 21
原创 Linux笔记---简单指令
博主使用的是华为云服务器+xshell终端的方式学习的,因为据说这样的方式比较接近以后的工作环境。其中云服务器安装的是Ubuntu操作系统(以Linux为内核,适合新手学习Linux的一个版本)这里的云服务器不一定使用华为的,但是我在货比三家之后发现华为最便宜的一款服务器是能找到的服务器中最便宜的。我们作为初学者,选取云服务器时只需要考虑最便宜的即可。华为的云服务器是自带远程终端的,但是延迟比较高,还是建议下载xshell终端来进行远程链接。
2024-09-21 10:49:30 957 20
原创 C++笔记---二叉搜索树
K _key;:_key(key){}public://强制生成默认构造//拷贝构造//析构~BSTree();
2024-09-17 13:25:03 1283 12
原创 C++笔记---多态
具体来说,动态的多态发生在继承体系中,父类与子类或统一父类的各子类之间,是在调用函数时发生不同的行为的现象。比如Student继承了Person。Person对象买票全价,Student对象优惠买票。public:cout
2024-09-16 13:28:35 974 4
原创 C++笔记---继承(下)
要实现无法被继承的类有两种方式:C++98及其之前:将父类的构造函数设置为private成员。C++11及其之后:使用final关键字修饰父类。将构造函数设置为private是因为:子类的构成必须调用父类的构造函数,但是父类的构成函数私有化以后,子类看不见就不能调用了,那么子类就无法实例化出对象。
2024-09-15 13:13:31 1061 16
原创 C++笔记---继承(上)
class 子类名 : 访问限定符 父类名// 拓展内容通常来说,父类和子类具有类别上的包含关系。例如,老师和同学不仅具有人的基本特点,还在人的基础之上有了自己的拓展,而老师和同学都属于人。我们在用C++进行描述的时候,就可以将老师和同学设计成人的子类:public:// 进⼊校园/图书馆/实验室刷⼆维码等⾝份认证protected:string _name = "张三";
2024-09-13 19:50:13 1053 11
原创 C++笔记---模板进阶
【优点】1. 模板复用了代码,节省资源,更快的迭代开发,C++的标准模板库(STL)因此而产生2. 增强了代码的灵活性【缺陷】1. 模板会导致代码膨胀问题,也会导致编译时间变长2. 出现模板编译错误时,错误信息非常凌乱,不易定位错误。
2024-09-13 19:50:00 1003 11
原创 C++笔记---stack和queue
queue---队列,是一种“先进先出,后进后出”的数据结构。此处的queue是STL库中定义的一个类模板,用于实例化出存储各种类型数据的队列。判断队列是否为空(空true/非空false)返回队列中的数据个数T& front();返回队头元素(目前最早进最先出的元素)T& back();返回队尾元素(目前最后进最后出的元素)入队列(到队尾)void pop();出队列(删除队头元素)交换两个队列的内容。
2024-09-11 17:40:16 770 6
原创 C++笔记---list
list其实就是就是我们所熟知的链表(双向循环带头结点),但其是作为STL中的一个类模板而存在。也就是说,list是可以用来存储任意类型数据的顺序表,既可以是内置类型,也可以是自定义类型,或是STL中的其他容器。除了底层的实现不同以外,用法与vector基本相同,但不支持随机访问,以及与随机访问有关的接口。具体以为准,本文为该文档的一个简单总结与标注。
2024-09-10 19:58:36 1503 12
原创 C++笔记---vector
vector其实就是我们所熟知的顺序表,但其是作为STL中的一个类模板而存在。也就是说,vector是可以用来存储任意类型数据的顺序表,既可以是内置类型,也可以是自定义类型,或是STL中的其他容器。vector的使用方式与string基本相似,但其接口相对于string来说要简洁地多,也与之后会介绍地各种STL的类模板跟为接近。具体以为准,本文为该文档的一个简单总结与标注。
2024-09-08 12:23:26 883 11
原创 C++笔记---string类(简单地使用)
string类是C++标准库中给出的一种类类型,其目的是为了代替C语言中的字符串。C语言中,字符串是以'\0'结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问。string类通过运算符重载,基本兼容了C语言中字符串的特性,字符串也可隐式类型转换为string类。
2024-09-04 17:24:06 1008 3
原创 C++笔记---模板初阶
模板是什么模板就是一种通用的模型,只要我们给出模板,编译器就可以自动帮助我们自动生成函数或类。模板又分为函数模板和类模板。模板的意义这些函数的函数体完全一样,而我们写了这么多个仅仅是因为参数的类型不同,如果有新的类型出现,我们还需要继续增添这样类似的函数。这么简单的工作又何必让我们亲自动手呢?祖师爷Bjarne Stroustrup说要方便,于是便有了模板。
2024-09-01 10:40:32 458 2
原创 C++笔记---内存管理
共同点都是从堆上申请空间,并且需要用户手动释放。不同点1. malloc和free是函数,new和delete是操作符;2. malloc申请的空间不会初始化,new可以初始化;3. malloc申请空间时,需要手动计算空间大小并传递,new只需在其后跟上空间的类型即可, 如果是多个对象,[]中指定对象个数即可;4. malloc的返回值为void*, 在使用时必须强转,new不需要,因为new后跟的是空间的类型;
2024-08-24 15:41:44 716 12
原创 C++笔记---类和对象(下)
1. 每个成员变量在初始化列表中只能出现一次,语法理解上初始化列表可以认为是每个成员变量定义初始化的地方,但并不完全正确。2. 引用成员变量,const成员变量,没有默认构造的类类型变量,必须放在初始化列表位置进行初始化,否则会编译报错。3. 尽量使用初始化列表初始化,因为那些你不在初始化列表初始化的成员也会走初始化列表,如果这个成员在声明位置给了缺省值,初始化列表会用这个缺省值初始化。如果你没有给缺省值,对于没有显式在初始化列表初始化的内置类型成员是否初始化取决于编译器,C++并没有规定。
2024-08-20 17:54:17 891 19
原创 C++笔记---类和对象(上)
public:// 成员函数perror("malloc申请空间失败");return;top = 0;// ...扩容int Top()private:// 成员变量int* array;size_t top;// 分号不能省略class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省 略。类和C语言中的结构体类似,类体中内容称为类的成员:类中的变量称为类的属性或成员变量;类中的函数称为类的方法或者成员函数/类函数。
2024-07-29 17:45:32 1048 13
原创 C++笔记---引用
引用就是为一个变量取一个别名,无论是通过原名还是别名进行访问,访问到的都是同一块空间。从语法上来讲,引用没有开辟额外的空间,逻辑上类似于(引用类型和引用对象不对应的情况,详见“”部分)。类型& 引用别名 = 引用对象;C++中为了避免引入太多的运算符,会复用C语言的一些符号,比如前面的>>,这里引用也和取地址使用了同一个符号&,大家注意使用方法角度区分就可以。这里的a,b,c,d共用一块空间,所以输出的结果是4个1。
2024-07-27 00:15:00 1183 23
原创 C++笔记---缺省参数和函数重载
C++支持在同一作用域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者参数类型不同。这样C++函数调用就表现出了多态行为,使用更灵活。C语言是不支持同一作用域中出现同名函数的。// 1、参数类型不同// 2、参数个数不同void f()// 3、参数类型顺序不同由于构成函数重载的同名函数的参数有所不同,编译器就可以根据调用时传入的参数来确定调用的具体是哪个函数。
2024-07-25 16:52:12 596 12
原创 C++笔记---命名空间(namespace)
在命名空间中可以定义变量,结构体,函数,甚至是其他命名空间。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找一个变量/函数/ 类型出处(声明或定义)的逻辑,有了域隔离,名字冲突就解决了。局部域和全局域除了会影响编译查找逻辑,还会影响变量的生命周期,命名空间域和类域不影响变量生命周期。注意:namespace只能定义在全局,当然它还可以嵌套定义。项目工程中多文件中定义的同名namespace会认为是⼀个namespace,不会冲突。
2024-07-25 16:02:27 735 23
原创 排序算法集合
其排序的过程极其复杂,具有许多不可控因素,不能简单地通过循环的层数来计算时间复杂度。希尔排序的代码很难理解,但是其解决问题的思想却很值得我们学习借鉴。
2024-06-02 19:48:58 1492 41
原创 用C语言把一棵普通二叉树安排得明明白白
一个结点含有的子树的个数称为该结点的度;如上图:A的为6:度为0的结点称为叶结点;如上图:B、C、H、I...等结点为叶结点:度不为0的结点;如上图:D、E、F、G...等结点为分支结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;如上图:A是B的父结点:一个结点含有的子树的根结点称为该结点的子结点;如上图:B是A的孩子结点:具有相同父结点的结点互称为兄弟结点;如上图:B、C是兄弟结点:一棵树中,最大的结点的度称为树的度;如上图:树的度为6。
2024-05-23 19:52:19 761 46
原创 栈和队列的相互实现
队列的特点是先进先出,而栈的特点是后进先出(先进后出),也就是说重点在于利用两个队列来改变“出”的顺序。于是,我们就可以利用起另一个队列,将队尾元素之前的元素全部出队并入队到另一个队列。但是在出栈时,被删除的栈顶元素为队尾元素,而队列没有相应的删除队尾元素的接口。这时,我们就可以对队尾元素进行出队操作了,但是不将其入队到另一个队列中。注意到,将一个栈的数据依次转移到另一个队列时,栈的顶为发生了颠倒。于是,我们用一个栈来对队头进行操作,另一个栈来对队尾进行操作。这样我们就实现了出栈的操作。
2024-05-12 15:07:45 515 29
原创 链队列和循环队列
/ 链式结构:表示队列}QNode;// 队列的结构int size;}Queue;// 初始化队列// 队尾入队列// 队头出队列// 获取队列头部元素// 获取队列队尾元素// 获取队列中有效元素个数// 检测队列是否为空,如果为空返回非零结果,如果非空返回0// 销毁队列。
2024-05-11 20:55:04 959 28
原创 栈与递归的实现
int top;}Stack;//初始化//销毁//插入//删除//获取栈顶数据//判断是否为空//剩余数据个数递归的思路十分地巧妙,有利于我们分析与解决十分困难的问题,但其算法本身存在效率低下的问题,所以我们希望通过非递归的方式来实现递归解决问题的思路。当递归函数调用时,应按照“后调用先返回”的原则处理调用过程,因此栈成为了解决的一问题的不二人选。通过栈来实现递归,并没有特定的套路,需要在理解递归机制的基础上进行分析,解决问题的路径可能与递归算法相同也可能不同。
2024-05-10 18:09:06 1122 26
原创 经典面试题---环形链表
如果你在面试中遇到了这道题并清晰流畅地答出了本文的内容,那么你的面试就稳了一半了。如果觉得写的不错就三连支持一下吧!加纳……
2024-05-07 18:14:48 881 32
原创 哈夫曼编码---一种无损数据压缩算法
1. 整体上要采用变长编码,出现频次多的字符用短码。2. 通过树来帮助我们编码,就可以保证某个字符的编码不是另一个字符编码的前缀。3. 往树的左子树表示编码增加一个“0”,往树的右子树表示编码增加一个“1”(也可交换)。4. 树的叶子节点表示一个字符,从根结点到叶子结点的路径就是该字符的编码。但问题是,即使按照以上的方式来编码,依然有很多可能的编码方式(树的形状)能供我们选择。既然都研究到这里了,我们肯定不会随机选择一个。
2024-04-28 21:38:21 1266 28
原创 C语言贪吃蛇(可在头文件中添加食物,选择撞墙是否会死)
项目为控制台程序,在控制台上实现。1. 实现游戏开始界面,让用户选择模式(撞墙/循环)等;2. 实现地图的绘制;3. 实现贪吃蛇,并使其根据用户的命令移动;4. 实现食物的随机刷新,并为每一种食物设置分值;5. 在游戏过程中打印适当的提示信息以及实时信息的刷新;6. 实现贪吃蛇的变长;7. 实时检测游戏状态(正常/撞墙/撞到自己);
2024-04-19 20:53:35 1217 22
原创 C语言双向链表
链表的种类很多,主要由三个要素决定:是否带头,单向还是双向,是否循环。根据这三个要素的组合,共可得到8(2*2*2)种链表1. 单链表:不带头单向不循环链表。2. 双向链表:带头双向循环链表。之前我们已经实现过单链表单链表在三个元素的选择中,选择的都是较为简单的选项,结构简单那就意味着我们在对其进行操作时所能用的现成条件较少,操作函数的实现就较为复杂。双向链表作为单链表的另一个极端,每个元素都选择了较为复杂的那个,而将结构设计的复杂的目的,就是为了解决一些操作实现起来很麻烦的问题。
2024-04-15 20:45:32 771 16
原创 如何开辟动态二维数组(C语言)
C语言标准库中并没有可以直接开辟动态二维数组的函数,但我们可以通过动态一维数组来模拟动态二维数组。二维数组其实可以看作是一个存着"DataType []"类型数据的一维数组,也就是存放着一维数组地址的一维数组。所以,我们就可以动态开辟一个数组指针数组,再为每一个元素动态开辟一个一维数组的空间,以此来模拟动态二维数组。但是,数组指针数组似乎也不太好开辟,或者说开辟完后不太符合我们的预期,因为其元素的类型为"DataType [n]",所指定的一维数组的大小无法修改。
2024-04-12 20:42:58 751 13
原创 单链表和文件操作使用练习:通讯录
1. Contact.h和Contact.c分别为实现通讯录的头文件和源文件。2. SList.h和SList.c分别为实现单链表的头文件和源文件。3. test.c为测试用的源文件,用于调用通讯录提供的函数。4. Contact.txt用于存储联系人信息。
2024-04-12 20:42:47 509 13
原创 C语言单链表
单链表相对于顺序表来说,优势有:1. 对数据进行增加删除较为方便,因为我只需要改变结点之间的链接关系即可。2. 不会浪费空间,有需要我才会开辟新的结点(尽管每个结点都是结构体,所占空间比数组元素多)。劣势:1. 查找不便,只能一个一个地通过next指针来查找,且无法访问某结点的前一个结点。而顺序表则可通过下标访问操作符来对数据进行直接访问。
2024-04-09 21:40:56 1755 15
原创 C语言实现快速排序算法
快速排序的非递归算法是用栈模拟递归实现的,由于太麻烦我就没写,感兴趣可以自己尝试写写。单趟排序算法用哪个,快速排序递归还是非递归,层次较深时换用什么排序算法,这些都是可以自由组合的。
2024-04-06 19:03:21 1323 32
原创 稀疏矩阵的链式存储结构:十字链表
int row;//1~n//非零元素所在行,列后继链域//行,列链表的头指针向量int m;//行数int n;//列数int len;//非零元素个数}CrossList;
2024-04-04 15:34:37 1671 3
原创 稀疏矩阵的三元组表表示法及其转置
/一个三元组元素//非零元素行下标和列下标}Triple;//稀疏矩阵//非零元素的三元组表//矩阵行数,列数,非零元素个数//容量}TSMatrix;
2024-04-04 11:13:17 3356 13
原创 C语言实现顺序表
代码仅作参考,顺序表是一种思想而不是固定的程序或代码,只要能达到相同的目的即可。其细节要依据实际要处理的问题来进行修改。C语言实现学生管理系统-CSDN博客。
2024-04-02 17:48:39 981 9
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人