自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 资源 (1)
  • 收藏
  • 关注

原创 树 --- 二叉搜索树

定义:二叉搜索树,又称二叉排序树。顾名思义,它是一种树形结构,并且根据名字可以体现出它有排序和搜索两个特征。排序。对一个二叉排序树进行中序遍历,得到的是有序的序列。 搜索。在二叉排序树中对最大元素和最小元素进行搜索会十分遍历。最小元素在树的最左边,最大元素在树的最右边对于二叉排序树主要有以下操作:购买节点 释放节点 初始化树 插入元素 查找结点(非递归) 查找结点(递归) ...

2019-01-21 19:49:38 102

原创 树 --- 树的线索化

树为什么要线索化? 树如何线索化? 遍历线索树1、树为什么要线索化?      n个结点的二叉链表共有2n个链域,非空链域为n-1个,但其中的空链域却有n+1个。因此,提出了一种方法,利用原来的空链域存放指针,指向树中其他结点。这种指针称为线索。2、树如何线索化(中序)?以中序线索化为例如果ptr->lchild为空,则存放指向中序遍历序列中该结点的前驱结点。这个结点称...

2019-01-19 18:58:01 436 1

原创 树 --- 基本操作

计算树中的节点个数 查找节点位置 查找某个节点的父节点 判断是否是完全二叉树 判断是否是满二叉树1、计算树中的节点个数思路:计算节点个数和计算树的深度其实本质上的一样的。树的节点个数即为左子树的节点个数加右子树节点个数加1.因此同样可以用递归来做。代码如下:int GetSize(Node* tree){ if (tree == NULL) { return 0;...

2019-01-19 16:32:04 246

原创 树 --- 遍历树

先序遍历树(递归) 中序遍历树(递归) 后序遍历树(递归) 非递归先序遍历 非递归中序遍历 非递归后序遍历 层序遍历1、先序遍历树(递归)思路:第一次访问节点便进行打印。 递归遍历该节点的左子树 递归遍历该节点的右子树代码如下:void PreOrder(Node *tree){ if (tree != NULL) { cout << tre...

2019-01-19 16:08:53 274

原创 树 --- 创建树

根据先序序列创建树 先序后序序列创建树 后序中序序列创建树二叉树节点的结构体如下:typedef char ElemType;typedef struct Node{ ElemType val; Node* lTree; Node* rTree;}Node;1、根据先序序列创建树只通过先序序列创建二叉树,序列必须是满二叉树的形式,因此没有元素的节点必须用特殊字符补齐...

2019-01-19 15:05:39 788

原创 守护进程

一、守护进程的特点后台服务进程 独立于控制终端 周期性执行某任务 不受用户登陆注销影响 一般采用以d结尾的名字(服务)二、进程组一个或多个进程的集合,每个进程都有一个进程组ID,这个ID就是进程组长的进程ID。1、进程组的组长:组里边的第一个进程就是进程的组长 进程组的ID == 进程组组长ID三、会话 -- 多个进程组一个或多个进程组的集合,每个会话有唯一一个会...

2019-01-17 12:50:14 160

原创 Linux复习---命令篇

文件操作more:文本过滤器,以全屏幕的方式按页显示文本文件的内容。空格键:显示文本的下一屏内容enter键:只显示文本的下一行内容H键:显示帮助屏,该屏上有关的帮助信息B键:显示上一屏内容Q键:退出rndre命令head:用于显示文件的开头内容。在默认下,head命令显示文件的10行内容 tail:用于显示文件的尾部内容。默认显示10行 cat:连接文件并打印到标准...

2019-01-16 22:22:57 215

原创 进程间通信

进程间通信由哪些方式?管道 信号量 信号 消息队列 共享内存 套接字1、管道实现原理:队列,头指针写,尾指针读局限性:基于队列的数据结构,数据只能读一次管道是半双工。匿名管道:父子进程通信有名管道:任意两个进程之间通信管道数据存放在内存,但是有名管道存放在磁盘(但该文件大小永远为0)详解传送:管道详解2、信号量临界资源:一次只允许一个进程访问的资...

2019-01-16 19:14:21 218

原创 静态库和共享库

什么是库?库是预先编译好的方法的集合静态库的生成讲所有的.c文件处理成.o文件。gcc -c max.o max.c 将所有的.o文件打包。ar crv libfoo.a max.o共享库的生成将所有的.c文件处理成.o文件。gcc -c max.o max.c 将所有的.o文件打包。gcc -shared -fPIC -o libfoo.so max.o库的使用参数:...

2019-01-16 18:15:22 132

原创 通过代码判断大端和小端

大端:数据的高字节存放在低地址;数据的低字节存放在高地址 小端:数据的高字节存放在高地址;数据的低字节存放在低地址例如在32位机器上存放0x123456789,其大小端模式存储如下:如何通过代码检测机器是大端还是小端?方法一:# include<iostream>using namespace std;union text{ int a; char b...

2019-01-15 21:27:09 1698

原创 Linux内核----进程调度

       进程调度是指将哪个进程投入运行,何时运行以及运行多长时间。进程调度程序可看做在可运行态之间分配有限的处理器时间资源的内核子系统。相关概念非抢占式多任务和抢占式多任务:Linux提供了抢占式的多任务,在此模式下由调度程序来决定什么时候停止一个进程的运行,以便其他进程能够得到执行的机会。这个强制的挂起动作叫做抢占。 时间片:实际上就是分配给每个可运行进程的处理器时间段。Linu...

2019-01-14 22:10:42 287

原创 继承多态常见类型题目

1、类的编译顺序,类的构造顺序,子类构造顺序,子类析构顺序类的编译顺序:类名 ---> 成员名 ---> 方法体子类的构造顺序:先构造父类,再构造子类子类的析构顺序:先析构子类,再析构父类2、重载,隐藏,覆盖重载:1、作用域相同           2、函数名相同           3、参数列表不同隐藏:子类隐藏父类同名的方法覆盖:子类覆盖父类相同...

2019-01-13 23:24:23 224

原创 C++中的四种强制类型转换

C语言支持类型强制转换,C++为什么要引入其他类型转换C风格的转换格式很简单,但是有不少缺点的:转换太过随意,可以在任意类型之间转换。你可以把一个指向const对象的指针转换成指向非const对象的指针,把一个指向基类对象的指针转换成一个派生类对象的指针,这些转换之间的差距是非常巨大的,但是传统的C语言风格的类型转换没有区分这些。 C风格的转换没有统一的关键字和标示符。对于大型系统,做代...

2019-01-13 22:11:52 215

原创 继承与多态知识点

访问权限子类无法访问父类的private成员 父类的proected成员可以被子类(子类内部)访问,不可以被外部访问 private会被继承,但无法访问。(可以通过查看子类大小验证) 继承默认是private方式 父类中成员通过相应的继承方式继承给子类后,这些成员对于子类来说,访问权限以访问方式为最低级别(如果原成员访问级别比访问方式低,则原成员对子类来说访问权限不变)。例如,父类中变...

2019-01-13 21:11:42 463

原创 实地址模式和保护模式

一、逻辑地址和物理地址物理地址:加载到内存地址寄存器中的地址,内存单元真正的地址 逻辑地址:CPU生成的地址。相当于当前进程数据段的地址(是偏移地址)二、什么是实地址模式1、分段        在程序装入内存时并不是整块装入。因为一个程序包含了很多数据结构,不能一概而论。例如代码是只读的,相对固定的;而数据则会随着程序的变化不断发生变化。因此在程序装入的时候是采用分段的方式,将不同...

2019-01-11 14:46:51 1579

原创 =运算符重载

=运算符重载要注意以下问题是否把返回值的类型声明为该类型的引用,并在函数结束前返回实例自身的引用。只有返回一个引用,才可以允许连续赋值。例如:str1 = str2 = str3;是否把传入参数的类型设为常量引用。这样做有两个目的。(1)提高效率,因为以实例作为参数将会调用一次拷贝构造(2)不改变传入实例的状态是否释放实例自身已有的内存,防止内存泄漏 判断传入的参数和当前的实例不...

2019-01-08 20:21:06 1671

原创 内存池

什么是内存池?       当我们使用new或者malloc申请内存的时候会调用系统调用,这样就会进行用户态到内核态的切换,如果频繁进行内存申请就会造成频繁的用户态内核态之间的切换,从而导致程序效率低下。      我们可以事先申请一块很大的内存,称之为内存池,之后每次申请就从内存池中申请,释放就又还给内存池,只有当内存池中的内存用光之后再继续向系统申请,这样可以大大减少用户态和内核态之间...

2019-01-03 21:57:29 162

原创 linux内核剖析---fork

fork的功能是什么?       fork的功能是复制进程。进程是一个正在运行的程序,是资源分配的最小单位,系统管理进程是依靠对进程控制管(PCB)的管理完成的,每个进程的产生分两步:分配pcb 准备进程实体,如分配内存空间等。fork的底层调用是什么?fork、clone、vfork它们的底层调用的都是do_fork。do_fork的工作流程是什么?1、定义PCB指针s...

2019-01-03 11:27:47 448

原创 单例模式

什么是单例模式?       单例模式是一种软件(程序)设计模式,在它的核心结构中只包含一个叫做单例的特殊类。通过单例模式可以保证系统(程序)中,应该该模式的类一个类只有一个实例,即一个类只有一个对象实例。单例模式如何设计?将类的构造函数设置为private属性(保证外部不可以通过对象调用构造函数,即不可以通过类名直接创建对象) 通过类型作用于调用静态成员函数创建对象(此时还可以创建...

2019-01-02 22:46:05 99

原创 智能指针

什么是智能指针?      智能指针是一个类,这个类的构造函数中传入一个指针,析构函数中释放传入的指针。智能指针都是栈上那个的对象,所以当函数(或程序)结束时都会被自动释放。为什么要使用智能指针?在堆区申请空间往往会遇到以下问题:1、内存被不正确的释放,例如下代码:void fun(int *p){ *p = 5; cout << *p <...

2019-01-01 12:18:54 227

epoll源码剖析

本文详细介绍了epoll的原理和Linux内核中如何实现epoll_create、epoll_ctl、epoll_wait.

2019-02-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除