自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 深度探索C++对象模型——Data语义学

个别Struct的数据布局静态数据不占用对象空间,由整个类的对象共享,存储在静态变量区。class Point3d{private: float x; static list<Point3d*>* freeList; float y; static const int chunkSize = 250; float z;};只要继承不要多态关键在于保...

2018-07-23 22:49:14 277

原创 深入探索C++对象模型——构造函数语义学

什么时候编译器会合成默认构造函数?trivial default constructor当一个类没有任何用户自定义的构造函数时,它所拥有的是编译器声明的一个implicit trivial default constructor,这些构造函数实际上并不会被编译器合成出来。编译器的需要在四种情况下,为了满足编译器的需要,编译器会合成一个implicit nontrivial default cons...

2018-07-16 16:45:48 283

原创 多线程交替打印abcd,持续5s

一个互斥锁和条件变量的应用示例。#include <stdio.h>#include <stdlib.h>#include<unistd.h>#include<string.h>#include<pthread.h>static int num=0;#define THREAD_NUMBER 4pthread_mutex_...

2018-05-16 20:53:17 335

原创 利用信号解决竞争条件

在父进程调用fork创建了子进程后,父进程和子进程可能都有一些事情要做。例如,父进程需用子进程ID更新日志,子进程可能需要为父进程创建一个文件。fork后哪一个进程会先被调度执行是未知的,因此便会产生竞争条件。#include"apue.h"TELL_WAIT();//set things up for TELL_XXX and WAIT_XXXif((pid=fork())<0){...

2018-05-13 21:52:14 387

原创 void *指针是什么含义

指针是一个地址,有两个属性,一个是起始地址,一个是长度,起始地址告诉编译器从哪里开始寻址,地址长度由编译器根据指针所指对象的类型进行推断,如int占4字节,double占8字节。(1)void指针是一种没有类型的指针void* p;(2)任何指针都可以赋值给void指针A* a;void* p;p=a;(3)void指针转换为其他指针时需要进行类型转换A* a;void* p;a=(A*)p;(4...

2018-05-04 22:17:59 3077

原创 琅琊算法榜——排序算法大观园

在学习数据结构与算法的时候,排序算法总是最热闹的一块,现将各种各样的排序算法归纳总结如下。1选择排序选择排序是每次都从未排序序列中选择出最大元素,放到已排序序列的队首代码实现如下:#include <iostream>#include <algorithm>using namespace std;void selectionSort(int a[], int leng...

2018-04-11 17:39:57 203

原创 教你读懂深度优先的套路

深度优先遍历的基本框架其中:a是当前获得的部分解;k是搜索深度;input是其它输入;is_a_solution(a,k,input)判断当前的部分解向量a[1...k]是否是一个符合条件的解;construct_candidates(a,k,input,c,ncandidates)根据目前状态,构造这一步可能的选择,存入c[]数组,其长度存入ncandidates;process_solutio...

2018-03-29 17:20:40 349

原创 红黑树的原理,双红缺陷,双黑缺陷

引入      引入红黑树的目的是为了实现在维护BST平衡的同时,尽量控制拓扑结构调整的次数,即最好做到每次动态操作后只有O(1)次的拓扑调整。 红黑树的规则:(1)树根必须是黑色;(2)外部节点必须为黑色;(3)其余节点:红节点只能有黑孩子,即不能出现相邻的父子两代都为红色;(4)外部节点到根:所有外部节点的黑深度相同。       在红黑树中,提升红色节点,使之与黑父亲等高,每颗红黑树都会等价...

2018-03-25 22:22:57 3239

原创 最下失败组合数字

using namespace std;int GetMinNum(const string& str, int &oFiledMin){ int a_count[10] = { 0 }; for (auto& c : str) { int value = (int)c-48; ++a_count[value]; } int least = 0;...

2018-03-23 09:31:34 218

原创 优先二叉堆,堆排序

优先级队列(Priority Queue)      优先级队列是一种按照优先级访问的数据结构,在PQ中每个元素都具有自己的优先级,每次都是访问优先级最大的元素,借助完全二叉树可以实现优先级队列。完全二叉树指的是每一层都是满二叉树,并且最底层非空的元素都处于左边。若完全二叉树根节点的秩为0,后续元素的秩按照层序递增,那么在完全二叉树中有以下对应关系:(1)父节点的秩等于子节点的秩减1后整除2;(2...

2018-03-17 21:04:51 736

原创 散列,桶排序

一、散列原理      理想的散列结构不过是一个包含关键字的具有固定大小的数组,散列表的长度是数据结构的一部分。散列中的关键字不需要支持比较大小,只要能够支持判等操作就行了。每个关键字按照一个散列函数被映射到0到TableSize-1范围内的桶单元。当不同的关键字被映射到相同的单元时,称作冲突(conflict)。散列的插入,查找,删除都是常数时间复杂度。      常见的散列方法有除余法hash...

2018-03-14 20:44:05 1160

原创 B树

B树的引入       B树是BST的一个变种,将BST中每k层具有父子关系的节点合并在一起形成一个超级节点,则每个超级节点内所含关键码的个数应满足以下条件:(1)最多为1+2+4+..+2^(k-1)=2^k-1个节点,具有2^k个外部分支;        最多的情况按照每一个节点都有2个孩子计算(2)最少为1+2+4+2^(k-2)+1=2^(k-1)个节点,具有2^(k-1)+1个外部分支。...

2018-03-13 22:31:03 258

原创 Splay Tree

Splay Tree的引入       类似于内存管理中的页面置换算法,在BST中最近被访问的节点,也更有可能在下一次被访问,为了利用这一局部性,SplayTree在每次访问一个节点后,都把这个节点提到根节点的位置,因此Splay Tree和其他BST的最大区别在于他的Search,Insert,Remove算法都是动态的。具体操作       双层伸展的精髓在于每次向上追溯两层,而非一层,反复考...

2018-03-13 11:42:31 346

原创 AVL树

AVL的引入      BST只保证了中序遍历序列单调非减,但是显然BST的查找,插入,删除算法的时间复杂度均为O(logn),具体取决于树有多高,因此控制BST的高度对于BST的效率而言至关重要;另一方面维护严格的平衡(叶节点只出现在最后一层)需要很高的管理成本:才会出现折中的平衡二叉树。为了描述BST的平衡性,引入了平衡因子的概念:节点的平衡因子=节点左右孩子的深度之差,AVL要求所有节点的平...

2018-03-12 22:50:35 215

原创 进程与线程

进程的概念进程是CPU上运行程序的抽象,每个进程有一个地址空间和控制线程,进程区别于程序,在于程序是静态的,进程是动态的,进程是系统进行资源分配和调度的基本单位。有4种主要的事件导致进程被创建(1)系统初始化;(2)执行了正在运行的进程所调用的进程创建的系统调用(运行的进程通过系统调用请求创建新的进程);(3)用户请求创建一个新进程;(4)一个批处理作业的初始化。进程的三种状态(1)运行态,此时刻...

2018-03-12 10:55:10 228

原创 BST的概念,以及查找,插入,删除算法

BST的概念BST,又叫平衡二叉树,是一种循关键码访问的二叉树,并且要求保持顺序性,即任一节点不小于其左后代,不大于其右后代(注意是后代,不是孩子)。BST的顺序性使得其中序遍历序列一定是单调非降的。BST的查找算法BinNodePos(T) BST_Search1(BinNodePos(T)&v,const T& e,BinNodePos(T)hot){    if(v==n...

2018-03-11 22:59:05 8150 3

原创 求数组的最大和子串

求一个数组的最大和子串思路:(1)用两个游标i,j同时从前往后扫描,用preSum和postSum记录两个方向的前n向和;(2)用两个固定的位置pos1,pos2记录对应子串的范围,即(pos1,pos2);(3)若preSum<0,则重新把preSum置为0,pos1等于那个比较大的负数的位置;(4)若postSum<0,则重新把postSum置为0,post2等于那个比较大的负数的...

2018-03-11 10:35:54 1263

原创 操作系统概论

什么是操作系统?(1)操作系统向应用程序提供基本抽象的概念,隐藏硬件;(2)操作系统用来管理一个复杂系统的各个部分,包括CPU,内存,磁盘,输入输出设备等。CPU除了有用来保存变量和临时结果的通用寄存器外,还有一些对程序员可见的专门寄存器,包括:(1)程序计数器,它保存了将要取出的下一条指令的内存地址(2)堆栈指针,它指向内存中当前栈的顶端,该栈含有已经进入但还没有退出的每个过程的框架。(3)程序...

2018-03-10 16:40:15 309

原创 中断与异常

中断与异常的概念:(1)CPU对系统发生的某个事件作出的一种反应,事件的发生改变了CPU的控制流;(2)CPU暂停正在执行的程序,保留现场后自动转去执行相应事件的处理程序,处理完成后返回断点,继续执行被打断的程序 中断的引入:为了支持CPU和设备之间的并行操作,比如设备完成输入输出向CPU发送中断报告结果异常表示CPU执行指令时本身出现了问题,如算数溢出,除零,或执行了陷入指令等。中断异常机制工作...

2018-03-10 16:39:24 290

空空如也

空空如也

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

TA关注的人

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