![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
编程
CR7lmz
这个作者很懒,什么都没留下…
展开
-
C++ 红黑树、关联式容器map、set
在很久之前我们说过AVL树,其是一种完全平衡的二叉搜索树。这篇文章我们将介绍另一种也是我们比较常用的二叉搜索树:红黑树红黑树是在二叉树的基础上,给结点增加了两种颜色(红,黑),以及通过其特定的性质来保证:树中最长路径的的结点个数不会超过最短路径结点个数的两倍。因此红黑树是一个近似平衡的二叉搜索树。因此红黑是是一个仅此平衡的二叉搜索树。其时间复杂度为O(lgN),与AVL树相同。但是大量证明表...原创 2020-03-22 19:17:34 · 355 阅读 · 0 评论 -
二叉树的基本操作
因为个人对于二叉树的操作有些地方理解的还不是很到位,所以本篇文章来总结一下二叉树的一些基本操作。那么二叉树的相关概念,这里就不再赘述。(本文用的是链式结构表示二叉树)结点信息struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int x):val(x),left(nullptr),right(null...原创 2020-03-04 18:03:03 · 210 阅读 · 0 评论 -
设计模式 之单例模式
什么是设计模式?简而言之。就是一些大佬总结出来的经验,将一些常见的问题或场景,设计成一种套路,可以让后续的程序员快速设计自己的代码。那么为什么我们需要用设计模式呢?单例模式代码框架稳定,代码复用度高,比较容易理解。常见的设计模式:创建型模式:用于构建对象,将实现从系统中分离出来。单例模式。结构型模式:用于在许多不同的对象中形成大型的对象结构。适配器模式行为模式:管理对象观察者模式...原创 2020-02-27 09:05:34 · 247 阅读 · 0 评论 -
数据结构 哈希搜索结构
我们之前学过的查找方法有很多:1.静态搜索顺序查找:O(N)。二分查找:O(logN)。2.动态搜索二叉搜索树:最优查询效率O(N)。AVL树:O(logN)。但是上述的查找都是要经过元素比较才能进行查找的。查询的效率取决于比较的次数。哈希结构我们理想的搜索方法是:不进行元素比较,而是对每个元素的存储格式进行改造,通过某种方式,将元素与存储结构建立一一对应的关系。这样就可以通过这...原创 2020-02-17 14:24:05 · 261 阅读 · 0 评论 -
牛客 丑数
题目要求:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解析思路:参考大佬:事无巨细,悉究本末(2楼)首先从丑数的定义我们知道,就是说一个丑数一定由另一个丑数乘以2或者乘以3或者乘以5得到,那么我们从1开始乘以2,3,5,就得到2,3,5三个丑数,在从这三...原创 2020-02-09 15:51:04 · 211 阅读 · 0 评论 -
牛客 把数组排成最小的数
题目要求:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路解析:刚开始没什么思路,只是想把越大的数转为字符串放在后面,越小的数放在前面。之后参考了一篇的博客,一下就明白了。https://blog.csdn.net/fanzitao/article/detai...原创 2020-02-08 17:32:18 · 174 阅读 · 0 评论 -
牛客 整数中1出现的次数(从1到n整数中1出现的次数
题目要求:求出113的整数中1出现的次数,并算出1001300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。...原创 2020-02-08 15:59:47 · 195 阅读 · 0 评论 -
牛客 字符串的排列
题目要求:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。递归算法的四个特性:1.必须有可达到的终止条件,否则程序将陷入死循环。2.子问题在规模上比原问题小。3.子问题可通过再次递归调用求解。4.子问题的解应能组合成整个问题的解。思路解析:这是个递归求解的问...原创 2020-02-07 17:05:52 · 238 阅读 · 0 评论 -
牛客 二叉搜索树与双向链表
题目要求:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。原创 2020-02-06 16:23:38 · 130 阅读 · 0 评论 -
牛客 复杂链表的复制
题目要求:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路解析:分为三步:1.复制每个结点,并将复制的结点放在原结点后面。(比如:复制A结点得到A1,将A1插入到A后面),这样做是为了找到复制结点的random指针域。...原创 2020-02-05 16:34:20 · 102 阅读 · 0 评论 -
牛客 二叉搜索树的后序遍历序列
题目要求:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路解析:由题目得到:因为是后序遍历,所以序列最后一个元素一定是树的根root。又因为是二叉搜索树,所以左子树所有的值小于root,右子树所有的值大于root。 因此我们可以通过遍历整个序列来在找到第一个大于root的值,从而找到左右子树,再递归...原创 2020-02-04 16:00:16 · 152 阅读 · 0 评论 -
牛客 顺时针打印矩阵
题目要求:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。解题思路:1.定义四个变量left、top、right、butt来规定矩形的左、上、右、下边界。2.打印第一圈的...原创 2020-02-02 17:40:17 · 140 阅读 · 0 评论 -
牛客 树的子结构
题目要求:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解决此题需要分为两步:1.在A树中找到与B树的根节点的值相等的结点R。2.再判断B树是否与A树中以R为根的子树具有相同的结构。第一步:1.递归遍历树A,在树A中找与B树的根节点的值相等的结点R。2.若找到进行第二步操作。3.若没找到,则返回false。代码实现如下:bool Ha...原创 2020-02-01 16:55:41 · 101 阅读 · 0 评论 -
C语言 指针
一、一级指针指针就是地址, 利用这个地址可以找到指定的数据,指针的大小是固定的4个字节。如图表示为:二、二级指针由于指针变量也是变量,是变量就有地址,所以一级变量的地址就是二级指针。如果说一级指针是用于对数据的更新, 那么二级指针就是用于对数据地址的更新。如图理解:三、指针数组首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。...原创 2019-06-15 09:42:31 · 148 阅读 · 0 评论 -
Linux 环境变量
环境变量环境变量也是Linux操作系统中非常重要的一部分。我们来看看什么是换环境变量。概念: 指的是用来在指定操作系统运行环境的一些参数。举个例子:我们写完一个代码后,进行链接的时候,我们并不知道链接的静态库或者动态库在哪里,但是我们依旧可以链接成功。这就是因为环境变量帮助编译器进程查找。常见的环境变量:1.PATH:指定命令的搜索路径。2.HOME:指定用户的主工作目录,默认为用户...原创 2020-01-29 17:51:21 · 106 阅读 · 0 评论 -
C++ AVL树
AVL树平衡二叉搜索树我们知道当二叉搜索树退化为单支树时,该树就变得不平衡了,所以为了解决此问题,就引出了平衡二叉搜索树-----当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差的绝对值不超过1,这样的树称为平衡二叉搜索树。平衡二叉搜索树有两种:其中一种为AVL树,另一种为红黑树。AVL树性质:1.必须是二叉搜索树。2.左右子树都是AVL树。3.左右子树高度之差(...原创 2020-01-11 17:47:00 · 144 阅读 · 0 评论 -
文件压缩
在开始之前,我们要知道以下几个内容。什么是压缩?所谓压缩,归根结底就是让文件变得更小,并且可以无损的还原。为什么对文件进行压缩?1.文件太大,为了节省空间。2.提高数据在网络上传输的效率。3.对文件进行保护(加密)。文件压缩的分类:1.无损压缩:源文件被压缩之后,通过解压缩还能还原成和源文件完全相同的格式。2.有损压缩:源文件被压缩之后,通过解压缩不能还原成和源文件完全相同的格式...原创 2020-01-08 17:16:09 · 2010 阅读 · 0 评论 -
Linux 进程
进程在说进程之前,我们先来说说冯诺依曼体系结构。像我们常见得计算机,或者不常见的计算机,如服务器等。都是遵循冯诺依曼体系结的。下图为冯诺依曼体系结构:对于冯诺依曼,要注意几点:1.此处的存储器是指内存。2....原创 2020-01-08 15:16:04 · 215 阅读 · 0 评论 -
C++ 二叉搜索树
二叉搜索树二叉搜索树又称为:二叉排序树,其也可以是一个空树,或者具有以下性质的树也可以被称为二叉搜索树:1.若左子树不为空,对于任意节点,比其左子树中任意节点都大。2.若右子树不为空,对于任意节点,比其右子树中任意节点都小。3.最左侧的节点一定是最小的,最右侧的节点一定是最大的。4.当对二叉搜索树进行中序遍历,得出来的是有序序列。二叉搜索树的操作:...原创 2020-01-05 21:22:05 · 248 阅读 · 0 评论 -
C++ 异常
异常先回忆一下C语言中处理错误的方式:1.终止程序:如assert、exit(0)。缺点:暴力,对用户不是很友好。2.返回错误码。(常用,错误码是Windows操作系统提供的)若用VS编译器,用GetLastError() 来获取最近一次发生错误的错误码。并且可以通过VS工具–错误查找的选项,来输入对应的错误码,来看对应的错误描述。但是仅限于一部分错误码描述,若要查特别大的错误码的描述,可...原创 2019-12-28 17:59:33 · 186 阅读 · 1 评论 -
C++ 智能指针
智能指针智能指针的使用以及原理:智能指针的思想:RAllRAll是一种利用对象声明周期来控制程序资源的一种技术。它可以在对象构造时获取资源,在对象析构时候释放资源,完全不用用户自己释放,当然也解决了用原生态指针的缺陷。RAll思想的好处:1.不用自己显示释放申请的资源,用户不用考虑什么术后该释放资源,将这些交给编译器即可。2.用这种方法,对象所需的资源在其生命周期内始终保持有效。下面...原创 2019-11-17 23:28:34 · 342 阅读 · 0 评论 -
C++ 多态
多态首先我们来说说什么多态?多态就是进行某个行为时,但不同的对象去会有不同的结果。举个例子:买电影票这个行为,普通人去买就是普通票,学生去买就是学生票。这种行为体现的就是多态。多态的实现条件前提:在继承体系下,继承权限是必须是public。1.基类中必须有虚函数(被virtual关键字修饰的成员函数为虚函数),在派生类中要对基类中的虚函数进行重写。(1)重写的时候,必须是在派生类中重写...原创 2019-11-05 17:37:25 · 184 阅读 · 0 评论 -
C++ 继承
继承概念:继承是使代码可以复用的重要手段,它允许在保持原有类性能的基础性进行扩展,增加功能产生的新类,这个类称为派生类或者子类,那么被继承的类就叫做基类或者双亲类。继承是类层次的复用。派生类:派生类是继承了基类中的成员变量。有以下代码可以验证:class base{public: void setbase(int year, int month) { _year = year...原创 2019-11-02 18:05:16 · 180 阅读 · 0 评论 -
C++ 模板的特化 模板分离编译
非类型模板参数模板参数分为:类型模板参数和非类型模板参数类型模板参数:出现在模板参数列表中能够,跟在class和typename之后。非类型模板参数:就是用一个常量来作为类或者函数模板的参数,在类或者函数模板中可将该参数当成常量来使用。 template<class T, size_t N>//(T为类型模板参数,N为非类型模板参数) class array { publ...原创 2019-10-28 18:37:54 · 184 阅读 · 0 评论 -
C++ STL总结
什么是STL?STL是标准模板库。STL是对常见数据结构的封装,以及通用的算法。算法可以操作任意类型的数据并且可以处理任意数据结构。STL六大组件容器:组织数据,对常见数据结构的封装。序列式容器: 对线性数据结构的封装----顺序表&链表序列式容器的接口分类:构造与销毁迭代器操作容量操作元素访问操作修改操作特殊操作string类容器:管理字符串。1.浅拷贝问题的...原创 2019-10-23 17:48:02 · 149 阅读 · 0 评论 -
C++ 容器适配器 以及 模拟实现stack queue priority_queue
容器适配器概念:适配器是一种设计模式,是将一个类的接口转换成客户希望的另外一个接口。为什么将stack queue priority_queue称为容器适配器在STL中并没有将stack queue priority_queue划分在容器的行列,这是因为其他的每个容器在底层都有自己的实现方式,而stack、queue、priority_queue只是在底层将其他容器进行了重新封装。...原创 2019-10-21 20:41:02 · 250 阅读 · 0 评论 -
C++ stack与queue 以及priority_queue
stack类概念:stack满足后进先出操作的环境,只能从容器的一端进行插入和提取的操作。stack的使用:stack<int> s;//构造空栈if (s.empty())//判断栈是否为空 cout << "空" << endl;else cout << "非空" << endl;s.push(1);//入栈s.p...原创 2019-10-19 17:10:28 · 181 阅读 · 0 评论 -
C++ STL deque类
deque类概念:1.是双端队列,双端队列是动态大小的序列式容器,其可以向两端进行伸缩。2.特定的库可以以不同的方式实现deque,但通常都是一种动态数组。不论在何种情况下,它都允许通过随机访问迭代器直接访问单个元素,可以根据需要动态的伸缩。3.,deque提供了一些与vector相似的功能,但deque在头部和尾部进行数据插入和删除操作更加高 效。与vector不同的是,deque不能保...原创 2019-10-18 13:59:17 · 177 阅读 · 0 评论 -
C++ STL list类
list类概念:1.list底层是**带头节点双向循环链表**。2. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代已让其更简单高效。3. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。 4. list是可以在常数范围内在任意位置进行插入和删除的序列式容...原创 2019-10-17 00:08:31 · 173 阅读 · 0 评论 -
C语言 数据结构 栈和队列
一、栈1、栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据也在栈顶。2、栈的实现栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些...原创 2019-07-27 17:42:56 · 171 阅读 · 0 评论 -
C语言 数据结构 顺序表和链表
一、线性表线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。二、顺序表顺序表一般可以分为:1. 静态顺序表:使用定长数组存储。2. 动态顺...原创 2019-07-27 00:37:14 · 498 阅读 · 0 评论 -
C语言 数据结构 堆
一、堆的概念及结构1、堆的概念:如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2i+1 且 Ki<= K2i+2 (Ki >= K2i+1 且 Ki >= K2i+2) i = 0,1,2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫...原创 2019-08-04 00:43:14 · 334 阅读 · 0 评论 -
C语言 数据结构 复杂度
一、时间复杂度_空间复杂度1、时间复杂度的定义:在计算机科学中,算法的时间复杂度是一个函数,它定量描述了该算法的运行时间。一个算法执行所耗费的时间,从理论上说,是不能算出来的,只有你把你的程序放在机器上跑起来,才能知道。2、大O的渐进表示法:实际中我们计算时间复杂度时,我们其实并不一定要计算精确的执行次数,而只需要大概执行次数,那么这里我们使用大O的渐进表示法。推导大O阶方法:a、用常...原创 2019-07-24 16:10:40 · 357 阅读 · 0 评论 -
C语言文件操作相关函数
一、什么是文件在程序设计中,一般谈的文件有两种:程序文件,数据文件。1.程序文件:包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。2.数据文件:文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。二、文件名一个文件要有一个唯一的文件标识,以便用户识别和应用...原创 2019-07-05 10:56:14 · 123 阅读 · 0 评论 -
C语言 结构体位断 枚举和联合!
一、结构体结构体是一些值得集合,这些值成为成员变量。结构体每个成员可以是不同成员。1、结构体类型的创建结构体的声明:struct tag//关键字+标签{member-list;//成员列表}variable-list;//变量 在声明结构式可以不完全声明: 例:struct { int a; char b; f...原创 2019-07-04 11:19:37 · 225 阅读 · 0 评论 -
新的开始!!!!
#自我介绍初次接触CSDN以及编程方面的知识,之前对电脑方面也是比较感兴趣。现在大二的我除了在学校里所学的一些关于编程的知识外,很少再去深入学习这方面知识,希望今后会在这些方面花更多的工夫去研究,也是对自己兴趣的一种认可吧。##编程目标争取熟练掌握C,C++。如果有其他的时间我会去了解其他各种编程语言,成为一名娴熟的程序员,各方面都了解一些。###如何学习编程1、先选一种自己喜欢的语言(...原创 2018-11-26 11:43:15 · 310 阅读 · 0 评论 -
C语言 数据结构 二叉树
一、树的概念及结构1.树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除了根结点外,每个子结点可以分为多个不相交的子树。2.判断树与非树a.子树是不相交的;b.除了根...原创 2019-08-02 14:29:31 · 298 阅读 · 0 评论 -
入门C++
一、什么是C++C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度 的抽象和建模时,C语言则不合适。为了解决软件危机, 20世纪80年代, 计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。二、C++的关键词三、命名空间在C/C++中,变量、函数和后面要学到的类都是...原创 2019-09-05 17:34:39 · 208 阅读 · 0 评论 -
C++ 类与对象
一、类1、类与对象的初步认识:C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。2、类的引入:在C++中,结构体内不仅可以定义变量,也可以定义函数。 在C++中更喜欢用class来代替 。3、类的定义class studentname{//有成员函数和成员变量...原创 2019-09-15 15:25:54 · 103 阅读 · 0 评论 -
C++ 构造函数&析构函数
一、构造函数1、构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有 一个合适的初始值,并且在对象的生命周期内只调用一次。构造函数的特征:(1)函数名与类名相同。(2)无返回值。(3)对象实例化时编译器自动调用对应的构造函数。(4)构造函数可以重载。 class Date { public: Date()//无参构造...原创 2019-09-17 16:05:38 · 181 阅读 · 0 评论