- 博客(56)
- 收藏
- 关注
原创 高阶数据结构 <红黑树>
红黑树是在1972年由发明的,当时被称为平衡二叉B树(symmetric binary B-trees)。后来,在1978年被和修改为如今的“红黑树”。红黑树是二叉搜索树的一种,但是红黑树是性能最均衡应用场景最广的一种二叉搜索树,相对于AVL树来说,红黑树在旋转条件上并不是很严格,但是依然可以有非常出色的查找性能,这得益于红黑树的性质,本节将为大家介绍红黑树的基本性质。
2024-03-27 16:22:40
2860
68
原创 高级数据结构 <AVL树>
前面我们学习了二叉树,普通的二叉树没有任何特殊性质,所以后面我们又学习了二叉搜索树,这种有序的结构一定程度上优化了二叉树的性能,但是普通的二叉搜索树在特殊情况下,例如插入序列从大到小有序时,二叉搜索树会退化成类似于链表的单支数,此时性能变为O(n),为了解决这个问题,科学家在二叉搜索树的基础上再次进行升级,而有了我们现在常见的AVL树和红黑树,本节我们将介绍AVL树的基础性质。
2024-03-18 18:49:50
1723
53
原创 高级数据结构 <二叉搜索树>
前面我们学习了二叉树,但仅仅只是简单的二叉树并没有很大的用处,而本节的二叉搜索树是对二叉树的升级,其查找效率相对于简单二叉树来说有一定提升,二叉搜索树是学习AVL树和红黑树的基础,所以我们必须先了解二叉搜索树。本节我们介绍了二叉搜索树,讲解了二叉搜索树的相关概念,为后面AVL树和红黑树的学习做铺垫,本节我们只是实现了最基本的代码,在AVL树和红黑树中,我们将实现更多功能,来完善我们的二叉搜索树。
2023-12-23 10:18:05
7799
236
原创 Linux进程间通信
进程间通信(IPC)是指不同进程之间的数据交换和通信。在多进程环境下,不同的进程需要共享内存、文件等资源,但是每个进程都有自己独立的地址空间,因此需要通过进程间通信来实现进程之间的数据交换和共享。进程间通信使得进程间可以进行数据传输、资源共享、通知事件等。例如,一个进程需要将它的数据发送给另一个进程,或者多个进程之间共享同样的资源,或者一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件等。本节我们将为大家介绍进程间通信的相关知识!
2023-12-04 14:49:59
2307
180
原创 C++ [多态]
前面我学习完了面向对象三大特性的前两个,本节我们将为大家介绍最后一大特性,那就是多态,也是面向对象中最重要的一点,通过多态可以让一件事在不同对象的执行下表现出不同的状态,所以多态也可以说是多种状态。例如我们平时坐公交车,我们普通人刷公交卡或扫二维码支付车费即可,而学生可以刷学生卡,老人可以刷老年卡,退役军人可以刷拥军卡等等,可以看出,在乘坐公交时,对于支付乘车费这个事情上,不同对象支付费用的方式不同,这就是多态!多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。
2023-11-14 15:04:31
2237
138
原创 C++ [继承]
面向对象的三大特性:封装,继承和多态,前面我们介绍了类和对象,如何对数据和数据操作方法进行封装,本章将为大家介绍另一大特性-继承,继承可以增强代码的复用性和增强功能的可扩展性,我们将学习如何通过父类衍生出更多特性的子类!这里,水果类作为父类,衍射出三种水果,苹果,西瓜和荔枝,这三种具体的水果都可以统称为水果,但是各自又有着自己的特性,例如苹果外皮是红色的,西瓜外皮是绿色的等等,这就是继承,继承将一个抽象的父类更加具体的实例表达!
2023-11-08 22:28:59
1768
103
原创 Linux软硬链接和动静态库
当我们安装一款软件成功后,桌面会多一个图标,如果我们点击图标就能启动软件,但那个图标就是软件本身吗?显然不是!图标只是软件启动程序的一个快捷方式,在Linux中可以通过软硬链接来创建类似于Windows下的软件快捷方式,Windows下创建快捷方式一般相当于Linux中的软连接;当Windows中的一个软件启动之后会加载各种文件,一般我们看到的软件启动程序都很小,但是软件安装包却很大,例如游戏,其实软件中大部分都是库文件,关于Linux下的库,本节将会详细为您介绍!
2023-10-06 22:31:07
4992
161
原创 C++ [STL容器适配器]
本节我们又介绍了STL适配器模式下的容器适配器,容器适配器的学习让我们对类和对象的封装又有了进一步的认识,类和类之间的组合应用有了初步的了解,最后我们学习了deque这个适配器容器的底层容器,了解了其底层结构的复杂和优缺点,这些将为我们后面的学习打下基础!欢迎阅读!
2023-06-21 23:43:16
6235
143
原创 C++ [STL容器反向迭代器]
我们知道STL大部分容器都有迭代器,迭代器又分为正向迭代器和反向迭代器,对于正向迭代器以及实现前面我们已经了解了不少,而反向迭代器的设计思想是适配器模式,本节我们介绍反向迭代器的实现!本节简单介绍了反向迭代器思想,将类和对象的封装意义体现的淋漓尽致,快来学习吧!
2023-06-19 09:28:00
6310
118
原创 C++ [STL之list模拟实现]
list的底层与vector和string不同,实现也有所差别,特别是在迭代器的设计上,本节将为大家介绍list简单实现,并揭开list迭代器的底层!list模拟实现到这里就介绍了,本篇我们简单介绍了一下list的增删功能实现(与链表差别不大),重点介绍了list的迭代器思想,深入理解list的迭代器可以让我们对类和对象又有进一步的认识,如果我们可以理解list迭代器思想,那么list的其他函数对于我们来说都不成问题!
2023-06-15 19:59:12
6605
98
原创 Linux重定向和缓冲区理解
前面我们介绍了文件描述符这个概念,关于文件描述符需要介绍的还有另一个知识,那就是重定向,重定向可以让我们指定程序向某一个文件流中输出数据或读取数据,操作系统只需要关心文件描述符即可;当我们在IO时,操作系统也并不是将数据直接写入文件,而是先写入缓冲区以提高效率;关于以上的概念,我们接下来将会逐一介绍!本节介绍了关于文件描述符的重定向知识,现在我们知道了我们不仅可以向屏幕打印字符,向键盘提取字符,也可以向其他文件输出和提取,因为Linux下一切皆文件!
2023-06-13 15:55:07
6515
101
原创 Linux文件理解和系统调用
我们在学习C语言时可以使用fopen打开文件fclose关闭文件;那么是C语言帮我们打开的文件吗?其实并不是,语言没有这个能力,而是借助操作系统之手打开文件并进行操作,本篇将为大家介绍关于Linux下文件操作的系统调用,并介绍Linux系统如何组织和管理进程打开的文件!
2023-06-08 18:54:02
8667
113
原创 Linux进程控制
进程并非只能创建,创建后进行合理的管理才能更好的利用进程,仅仅依靠操作系统的管理是不够的,所以本节将介绍关于进程控制的相关知识,让我们更合理的使用进程!进程替换是改变进程原有的执行代码,转而执行另一套进程代码的过程!将进程看作一个任务处理单元我们写出指令,进程依次执行命令当我们需求比较多,但代码又无法改变时,就可以使用进程替换父进程可以创建子进程,用另一个程序的代码数据替换子进程代码数据转而让子进程执行新程序的代码数据所以,进程替换的目的是让子进程帮我们执行特定任务,以应对不同场景!
2023-06-06 18:11:30
5583
119
原创 Linux进程地址空间
我们知道对于C/C++程序来说,程序占用的内存地址分为栈区,堆区,静态区等等,每一个程序在编译时都会分配这些空间,这些空间只是规划的虚拟地址空间,并不是分配的真实的物理空间,这样划分虚拟地址空间是操作系统为了更好的管理和使用内存空间而做的,那么虚拟地址(也称逻辑地址)是如何与物理地址联系起来的呢?本节将为您介绍!进程地址空间的介绍到这里就告一段落了,相信大家认识了Linux底层的虚拟地址空间后,对很多进程地址相关的问题一定有所解答!
2023-06-03 18:12:05
5310
85
原创 Linux环境变量
环境变量这个名词大家可能很陌生,对于程序员来说,我们配置某些程序的运行环境时需要配置环境变量,例如我们配置JAVA的JDK运行环境,对于不同的版本需要手动调整环境变量,每个系统中都有环境变量,本节将针对Linux系统下的环境变量进行介绍,欢迎阅读!环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数。
2023-06-02 14:59:41
5949
78
原创 C++ [STL之list的使用]
vector是一片连续的空间,在数据访问上性能较好,但是任意位置插入删除性能较低,头插头删性能亦是如此;此时在这种需要频繁插入的场景下,显然链表是一种更好的选择,STL中实现了带头双选循环链表,本次我们来介绍该如何使用STL中的链表list!list的使用介绍到这里就结束了,相信学会了list在需要频繁增删数据的场景下我们那个轻松应对,对于vector和list两者各有优劣,应对不同的场景我们需要合理应用甚至结合使用!
2023-05-28 12:28:52
9057
123
原创 C++ [STL之vector模拟实现]
vector是STL容器容器之一,其底层实现类似于数据结构顺序表,相当于string来说得益于泛型模板的加持使得vector可以变为任何类型,且是可以动态扩容,堪称大号数组!在vector的实现中,有许多值得我们学习的细节,接下来将为大家一 一介绍!
2023-05-27 13:57:36
5357
59
原创 C++ [STL之vector的使用]
vector是可变大小的数组序列容器,一般也叫向量;底层原理是顺序表,但是vector是泛型容器,可以支持int,double甚至自定义类型的存储,在平时应用非常频繁且广阔,vector在很多场景下可以提高我们的开发效率,所以学习vector这一利器的使用是必须的!vector的使用介绍到这里就结束了,vector是一款强大的泛型顺序表,他弥补了数组无法动态扩容的缺点,以及泛型思想使得vector可以实例化成任何类型的顺序表,但只其实现只有一份代码,相信vector的使用学习会提高你的开发效率!
2023-05-21 17:28:52
6119
123
原创 C++ [STL之string模拟实现]
前面我们介绍了STL容器string的部分接口使用,有了string使我们对字符串的操作如鱼得水,其实string不止于使用方便,其实现也有许多我们值得学习的地方,本节将为您介绍string常用接口的代码实现!
2023-05-19 23:11:26
5836
106
原创 Linux进程状态及优先级
操作系统想管理好进程并不简单,对于Linux系统将进程分为不同的状态进行管理;例如运行,阻塞,休眠状态等等,每一种状态都有不同的效果,这样才能发挥他的全部功效,且进程之间也有优先级,本文将为您详细讲解!进程状态和进程优先级的知识到这里就介绍的差不多了,通过了解进程状态,知道进程的阻塞和和运行的原理;了解进程优先级,学习了修改进程的优先级影响调度机制,这些知识都在为后面进程控制的学习打下基础!
2023-05-06 23:04:50
6333
138
原创 Linux进程初识
进程是计算机中的重要概念,一个程序被操作系统加载进入内存那么这个程序就成为进程,一个程序可以启动多次产生多个进程,操作系统也要管理这些进程,本节将介绍关于进程的一些基本知识!我们普通用户无法直接与计算机中的硬件打交道,也就是说在没有操作系统的情况下,我们几乎是无法使用计算机的,于是计算机大佬们创造了各种各样的操作系统!Windows操作系统Linux操作系统Mac操作系统(基于Unix)Android操作系统(基于Linux)…等。
2023-05-03 21:43:32
5266
86
原创 C++ [STL之string的使用]
字符串在程序中经常出现,C语言为此提供了很多字符串操作函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍不留神可能还会越界访问,于是STL单独为字符串实现了一个容器,用来专门存储操作字符串,本文将介绍string的常用接口,有了string的加入,我们对字符串的操作将游刃有余!
2023-04-24 22:54:04
5904
59
原创 C++ [STL-简介]
STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。STL(Standard TemplateLibrary)标准模板库,从根本上说,STL是一些数据结构的集合,因为是组织和存放数据简称为容器,这些“容器”有list、vector、set、map等,STL也是算法和其他一些组件的集合。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。
2023-04-22 21:40:50
5164
36
原创 C++ [模板]
C++为了提高开发效率,提高代码的复用性增加了模板的概念;模板就像打印卷子一样,100份卷子只需要一个模板卷子就能打印出来,但模板的神奇不止于此,通过这篇文章,我将为您打开泛型编程的大门!
2023-04-22 00:01:17
4979
30
原创 C++ [内存管理]
C++的内存管理与C语言在底层原理上相似,但是由于C++是面向对象的语言,在面向对象的思想上,需要对C语言的内存管理函数进行封装以适合面向对象的一些特性,所以本节将对C++的内存管理知识进行介绍!
2023-04-05 17:36:41
5319
50
原创 C++ [类和对象 - 下]
前面我们介绍了类和对象的基本概念以及类的六个默认成员函数,这些知识已经为我们搭起了一个基本的类框架,不过类和对象中还有一些小细节需要介绍,本节我们将进入类和对象的收尾阶段!
2023-03-24 19:04:37
5280
50
原创 C++ [类和对象 - 中]
C++类在设计之时,规定类中有六个默认的成员函数,这些成员函数天生就存在,而且功能都很强大,类和对象的关键点就在这六个默认成员函数的学习,本篇将会逐一介绍这六个成员函数,让我们向类和对象的深处出发!
2023-03-13 00:05:24
5021
42
原创 C++ [类和对象 - 上]
C++在C语言的基础上增加了面向对象的特性,有了类的概念,使其解决问题的焦点从解决过程转变为解决对象,对于C++来说任何事物皆为对象,从这里开始我们正式进入面向对象的大门!
2023-03-01 18:11:11
5178
29
原创 C++ [入门知识]
C++背景C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代,计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言,为了表达该语言与C语言的渊源关系,命名为C++。
2023-02-23 21:29:05
4944
28
原创 Linux调试器gdb
前面我们介绍了gcc/g++的使用,我们知道在VS平台下编写代码是可以调试的,调试是我们经常使用的纠错手段,在Linux平台下也有相关的调试工具,那就是gdb,调试是我们必须掌握的技能,没有调试项目的错误就无法快速解决!相信gdb的学习可以助力你在Linux相同上更顺利的构建大型工程,从容的面对各种bug,虽然在使用上与VS还有些差异,但是配合Linux上的其他工具一定可以使效率有一定的提升!
2023-02-18 14:17:22
3627
37
原创 Linux配置和使用Git
我们在Linux上会编写各种代码,而往往我们需要一个代码仓库平台为我们托管代码和版本管理,而git的创始人正是Linux系统的创始人林纳斯·托瓦兹,学会Linux上的git操作可以让我们随时随地对历史代码进行回溯且git还支持代码合并和标签等众多功能,所以学会使用git能让我们自由的对代码进行合理的管理!
2023-02-14 01:06:10
7073
13
原创 Linux项目自动化构建工具make/Makefile
会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力,一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的,规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
2023-02-11 16:43:57
4284
2
原创 Linux 编译器 gcc/g++
在Windows环境下,我们我们使用VS编译器可以写代码然后运行编译代码所成的程序,但在Linux系统下,我们写的C/C++代码需要通过gcc(C语言)和g++(C++语言)编译器才能生成可执行程序,所以学习gcc和g++是非常重要的!
2023-02-11 01:01:53
3694
11
原创 Linux编辑器vim
我们在使用一款操作系统时,无论是什么系统都有属于自己默认的文本编辑器,本节将介绍Linux编辑器vim!学习完vim,我们就可以相对自由的在Linux上写代码了,最后我们会配置vim环境,搭建主要用于C/C++代码编辑的vim。相信vim的学习会为大家打开Linux编程的大门,让我们在Linux中更加畅快的进行开发!
2023-02-09 00:36:13
3397
8
原创 Linux软件包管理器 yum
对于一个操作系统来说,软件的下载工具肯定也少不了,对于Linux系统在CentOS上的软件下载工具是yum,本节将为您介绍!在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系.
2023-02-02 20:50:43
3311
8
原创 Linux权限的基本知识
对于一个操作系统,权限的划分是肯定的,我们在使用Windows操作系统时如果在C盘中删除一些系统级的文件夹,那么操作系统肯定会提示你权限不足,Linux也是如此,在执行某些命令时需要特殊权限,本节将为您介绍!
2023-02-01 11:13:16
5234
32
原创 Linux基础指令
Linux系统对于我们来说可能非常陌生,但我们在以后的工作中不免会接触到Linux系统,对于Linux大家的了解一定是有不少的指令,没有方便的图形化界面等,但是正是因为这些才让Linux有更多的优点,本次我们就一起学习Linux指令,为后面在Linux系统上编程打下坚实基础!shell命令以及运行原理Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel) “ ,但我们一般用户,不能直接使用kernel。
2023-01-30 18:36:39
6339
31
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人