- 博客(21)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 红黑树
看红黑树之前先看AVL树有很多相似的地方,我也写了一篇AVL树的总结,我就没重复总结了。 我们先看红黑树特性1.根节点是黑色2.每个节点只能是黑色或者红色3.如果一个节点是红色,它得子节点必须是黑色的。4.每个叶子节点(NIL)是黑色的,这里可以是所有叶子节点连着最后一个(黑色的)哨兵节点(为NULL)。5.从任意一个节点到其叶子节点的所有路径中,包含相同数目的黑色的节...
2018-08-11 01:08:54
165
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 平衡二叉树
博客思路1.通过二叉排序树引出平衡二叉树2.如何判断是不是一棵平衡二叉树3.平衡因子4.左旋 右旋 双旋5.通过画图创建一棵二叉排序树6.二叉排序树的代码思路和整体框架 1.二叉排序树二叉排序树,又叫二叉查找树,它或者是一棵空树;或者是具有以下性质的二叉树:1. 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;2. 若它的右子树不空,则右...
2018-08-03 04:22:30
10631
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 普通二叉树
1.什么是二叉树树是一种比较重要的数据结构,它可以是二叉树,三叉树,可以说多叉树,但是我们今天是来看二叉树。二叉树是使用最广的树,二叉树是n个结点的有限集合,该集合为空集时候,就是我们空二叉树。或者有一个根结点有两棵互不相交的树分别称为左子树和右子树(或左孩子和右孩子),其次序不能任意颠倒。画张图看一下 根结点: 结点A分...
2018-07-27 11:10:50
2306
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 智能指针
1.智能指针作用提出智能指针时候,不得不提一下栈和堆。我们都知道,栈上的资源是由系统管理的,申请和释放资源都是由栈的策略来进行的。而堆上的资源申请,是用户显示的调用关键字new 和 delete来进行申请资源和释放资源,该资源的生命周期是执行new语句申请资源 到执行 delete释放资源。(或者程序结束由系统释放这部分堆资源)。这时候我们在来谈一下智能指针的作用和原理。智能...
2018-07-24 22:36:52
728
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 编译和链接
前小半部分参考《程序员的自我修养》1.源代码为什么需要编译链接编译类的语言(c 或者c++)写出的源代码机器是看不懂的,机器看懂的是可执行的代码。而源代码转化成可执行代码需要经过编译和链接。2.编译链接步骤(1)预编译 (2)编译 (3)汇编 (4)链接#include <stdio.h>int gdata1 = 10;int gdtata2 = 0;int gdtata3...
2018-07-12 13:15:40
483
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 普通成员方法和静态成员方法的区别
1.静态数据成员我们在了解普通成员方法和静态成员方法之前,先了解一下静态变量。在我们函数栈上定义一个普通变量之后,它的生存周期就是随着函数执行完,栈帧的回退释放掉。优点是封装了数据变量。全局变量的生存周期是该程序开始执行到该程序结束,作用域是全局下的,全局的函数都可以访问。(这样会引发很多问题因为这个不安全,没有很好的封装)。我们现在想要一个函数定义一个变量之后,该变量在函数执行完后,仍然值不变,...
2018-05-24 00:56:55
5529
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 信号量
什么是信号量信号量主要保护共享资源的,确保该资源在同一时刻只有一个线程占用。换句话说它就是控制多进程(多线程)共同访问共享资源的一种手段。信号量的定义最初的定义:信号量是一个特殊的变量,它只能取正整数值,并且程序对其访问都是原子操作。正式的定义:它是一个特殊的变量,只允许对它进行等待和发送信号。信号量就是一种特殊的计数器当其值>0时,其表示可用临界资源的个数当其值<0,表示资源忙,至少...
2018-04-30 18:29:41
5396
原创 01背包
01背包01背包题目给了很多个物品,W和V是两个数组,第i个物品重量是W[i],价值是V[i]。背包最大承受重量为n。如何让这个背包装的价值最大。01背包就是每个物品只有一件。定义一个和(物品总个数+1)的数组,当判断出这个物品需要装进去时候就置为1,不装进去置为0。这个就是这个数组。这也是为啥叫做01背包。粘贴一个题目过来int W[6] = {0 , 2 , 5 , 3 ,...
2018-10-06 17:56:07
151
原创 指针和引用的区别
引用引用是给另外一个变量起的别名,所以引用不会分配内存空间引用和指针的区别1.指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。2.引用在定义的时候必须进行初始化,并且不能改变,指针定义时候之后也可以改变指向。所以指针有判空操作,引用则不必。引用时候就是至死不渝。3.指针和引用自增运算结果不一样。4.引用访问一个变量是直接访问,而指针访问一...
2018-09-25 17:53:55
187
原创 C和C++区别
1.const * 和引用&const常量 常变量常变量就是不能做左值,其他都和变量性质一样的。常量在编译时候所有用到常量的地方都替换成常量的初始值。1.C和C++第一个区别: 我们什么时候要加常引用呢?很明显就是在引用我们常量的时候需要我们常引用。 函数返回值内置类型产生的临时量都是常量 不可更改 通过e...
2018-09-24 13:32:08
1251
原创 内部排序和外部排序
内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序期间全部对象太多,不能同时存放在内存中,必须根据排序过程的要求,不断在内,外存间移动的排序。 位置1.内部排序内部排序是排序的基础,在排序的过程中,把所有元素调到内存中进行排序,称之为内部排序。2.外部排序在数据量大的时候,只能分块排序,但是块和块排序不能保证有序,外排序用读写次数来衡量其效率。...
2018-09-20 01:38:30
6429
原创 快速排序
快排思想:快速排序就是取一个数将所有数据分割两部分,前一部分数字比取的数字小,后一部分数字都比取的这个数字大。这样的情况下,就能确定取的这个数就在这个位子。然后在通过分治思想,把两部分数据接着使用快速排序,递归的思想把所有数据能排好序。优化策略:1.三点取中就是三个数取到第二大的,如果快排的话每一趟取到整个数的越中间越好。2.少数量数字,用插入排序3.聚集优化遇到像年龄...
2018-09-19 17:27:43
160
原创 堆排序
什么是堆弄清楚堆排序之前,先弄清楚什么是堆。堆就是一个数据结构,是一个完全二叉树,满足所有的非叶子结点的值大于等于左右孩子结点。n个数的集合{a1,a2,a3,a4,a5.........ai......an} // i在这里表示下标左孩子结点 :相当于(父结点*2) //*乘以的意思右孩子结点: 相当于(父结点*2+1)//*乘以的意思 小根堆满足 ...
2018-09-18 11:20:39
113
原创 守护进程
1.守护进程守护进程创建1.fork创建子进程,父进程终止,让子进程在后台继续执行。(产生孤儿进程)2.子进程调用setsid产生新会话期并失去控制终端调用的setsid()使子进程进程成为新会话组长和新的进程组长。setsid 目的:由于创建守护进程第一步调用了fork ,父进程的会话期,进程组,也被子进程拷贝了。setsid函数就是为了使得它完全独立开来,从而摆脱其他进程的控制...
2018-09-16 12:08:42
261
原创 面向对象
面向对象基本概念对象:一般意义上的对象:是现实世界的一个实际存在的事物。一个人的个体,或者一个事物面向对象的方法中的对象:是系统中用来描述客观事物的一个实体。抽象与分类类:就是基于分类和抽象思维形成的,同一类对象我们可以抽象出它的共同属性和行为,形成类。比如:老师是一个类。学生一个类。这就是分类类和对象的关系:类型和实例的关系就和模具和铸件之间的关系 ...
2018-08-21 15:46:14
176
原创 分治策略
1.分治策略的思想分治就是把规模大的问题,划分为彼此独立的,规模小的结构相似子问题。直到划分到子问题能直接求解时,就通过递归来实现求解所有子问题,并合并所有解。因此递归和分治可以说是孪生兄弟。2.分治步骤第(1)步:分 把一个规模大的问题,划分成若干结构相同,能独立求解的子问题。第(2)步:治通过递归,求出每个子问题的解。第(3)步:合并把所有子问题的解,合并成一个更大规模问题的解。这里举个例子:...
2018-07-09 23:14:28
250
原创 Linux 管道
什么是管道管道是最基本的进程间通讯,它是半双工的通讯(数据流是定向的)。它创建于内存缓冲区中,用于连接一个写进程一个读进程,大小刚好为一个页(4KB)。一个进程把数据写入管道,由内核定向的流入另一个读进程。(多进程通讯中要用锁控制,防止一个进程在读取管道里数据没读完就被其他进程读走之类的问题)管道概念管道用的是利用文件系统file结构,和VFS索引节点inode来完成的结构。通过两个file文件指...
2018-04-19 00:16:04
1640
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人