自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 Data alignment

C语言,在对一个 struct variable使用sizeof operator(操作符)的时候,往往得到的结果并不是我们想象中——struct内所有member的size之和。 当清楚了什么是Data alignment(数据对齐),对这个问题就豁然开朗了。 Data Alignment Data Alignment 并非针对 Data 本身,而是Data(Variab

2015-08-31 16:08:16 1167

原创 1 数据结构类-最近公共祖先LCA问题

1.淘宝面试题:有一个一亿节点的树,现在已知两个点,找这两个点的共同的祖先。这个题怎么做呢?本题为一道开放性试题,所以可以随意一些。下文的第二道题目则不行。本题类型 实现特定的数据结构的一些另外要求的功能。方法1:修改原本数据结构的内部结构。给出的较为简单的方法:可以考虑的方案是稍微改一下树的存储结构:1 每个结点存储一个父节点指针和在父节点中的

2015-08-30 07:19:47 485

转载 第二章:拷贝构造函数

拷贝构造函数(copy constuctor)通常C++初级程序员会认为当一个类为没有定义拷贝构造函数的时候,编译器会 为其合成一个,答案是否定的。编译器只有在必要的时候在合成拷贝构造函数。 那么编译器什么时候合成,什么时候不合成,合成的拷贝构造函数在不同情况下 分别如何工作呢?这是本文的重点。拷贝构造函数的定义有一个参数的类型是其类类型的构造函数是为拷贝构造函数。如下:

2015-08-19 12:42:10 580

转载 C++函数调用详解

一、 什么是栈帧?    什么是栈帧,相信很多从事C编程的童鞋还是没有搞明白,首先引用百度百科的经典解释:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。”。    实际上,可以简单理解为:栈帧就是存储在用户栈上的(当然内核栈同样适用)每一次函数调用涉及的相关信息的记录单元。也许这样感觉更复杂了,好吧,让我们从栈开始来理解什么是栈帧...二、 栈(用户

2015-08-18 16:44:52 2757

转载 类(继承)的内存分配详解

1.基类与派生类的内存分配派生类继承基类      内存分配时,是在于基类对象不同的内存地址处,按基类的成员变量类型,开辟一个同样的类型空间,但注意开辟后派生对象的空间,不是复制基类的成员的值,而是仅仅开辟那种成员类型的空间,未初始化时,里面存在的数是不确定的       然后派生类自己定义的成员变量是排在继承的A类成员下面,如果派生类定义的变量名与基类相同,则此变量覆盖掉继承的基

2015-08-18 16:38:46 6566 1

转载 函数参数传递方式

函数参数传递方式之一:值传递(1)值传递的一个错误认识先看考题一中Exchg1函数的定义:void Exchg1(int x, int y) /* 定义中的x,y变量被称为Exchg1函数的形式参数 */{   inttmp;   tmp = x;   x = y;   y = tmp;   printf("x = %d, y = %d.\n", x, y)

2015-08-18 07:45:36 432

转载 动态规划

动态规划的本质不在于是递推或是递归,也不需要纠结是不是内存换时间。动态规划是对于 某一类问题 的解决方法!!重点在于如何鉴定“某一类问题”是动态规划可解的而不是纠结解决方法是递归还是递推!怎么鉴定dp可解的一类问题需要从计算机是怎么工作的说起…计算机的本质是一个状态机,内存里存储的所有数据构成了当前的状态,CPU只能利用当前的状态计算出下一个状态(不要纠结硬盘之类的外部存储,就算考

2015-08-17 11:13:00 429

转载 程序员如何快速准备面试中的算法

程序员如何快速准备面试中的算法前言    我决定写篇短文,即为此文。之所以要写这篇文章,缘于微博上常有朋友询问,要毕业找工作了,如何备战算法。尽管在微博上简单梳理过,如下图所示:       但因字数限制,许多问题无法一次性说清楚,故特撰此文着重阐述下:程序员如何快速准备面试中的算法,继而推荐一些相关的书籍或资料。顺便也供节后跳槽、3月春

2015-08-15 19:12:38 333

转载 胜者树和败者树

胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。       不同的是,胜者树的中间结点记录的是胜者的标号;而败者树的中间结点记录的败者的标号。        胜者树与败者树可以在log(n)的时间内找到最值。任何一个叶子结点的值改变后,利用中间结点的信息,还是能够快速地找到最值。

2015-08-15 17:58:11 687

转载 关于C++中常量的理解

关于C++中常量的理解一 常量的分类在C++中,常量是区分类型的,从字面形式即可识别其类型。整型常量(整数)的类型在上一节中已知道:整型数据可分为int, short int,long int以及unsigned int, unsigned short, unsigned long等类别。整型常量也分为以上类别。为什么将数值常量区分为不同的类别呢?因为在进行

2015-08-15 08:26:15 1231

转载 C++内存管理详解

C++堆和栈的分配腾讯、金山笔试常考栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈。堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,注意它与数据结构中的堆是两回事,分配方式类似于链表。全局区(静态区)(static)—全局变量和静态变量的存储是

2015-08-15 06:59:35 294

原创 new/delete和mallco/free的深入理解

一、基本概念     malloc/free:1、函数原型及说明:      void *malloc(long NumBytes):该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。      void free(void *FirstByte): 该函数是将之前用malloc分配的空间还给程序或者是操作系

2015-08-14 19:00:41 1328

转载 内联函数

内联函数类似于C里边的宏,只是宏经常有一些不安全因素,比如 宏定义 add() 是 a+b,调用的时候宏定义直接展开,不做任何的判断,如果调用res = add()*c; 得到的代码就是res = a+b*c;不是想要的结果。    内联函数可以理解成一个安全的宏定义,他就是一个真正的函数,只是不用压栈出栈,速度快,而且比宏定义安全,所以利用 短且频率 比较高的函数可以写成内联函数in

2015-08-14 10:24:47 317

转载 Treap树的基本操作

3. Treap的操作同其他树形结构一样,treap的基本操作有:查找,插入,删除等。3.1    查找同其他二叉树一样,treap的查找过程就是二分查找的过程,复杂度为O(lg n)。3.2    插入在Treap 中插入元素,与在BST 中插入方法相似。首先找到合适的插入位置,然后建立新的节点,存储元素。但是要注意新的节点会有一个优先级属性,该值可能会破

2015-08-11 12:36:50 461

转载 AVL树的旋转

AVL树的基本操作是几种旋转方法。觉得这篇文章讲解的很好很全面,就拿来分享了。一、引言由于普通二叉查找树可能出现有极不平衡的情况,使时间复杂度最坏,于是有学者提出限制二叉查找树各子树的分布,使树形状平衡,保证较好的查找复杂度。其中最著名平衡树之一即为AVL树。二、AVL树的定义官方的定义可以参见其它网上资料。在这里我用大白话解释,话粗理不粗。有一对有兄弟A和B,他们的共同父亲是

2015-08-10 12:32:31 568

转载 堆和二叉查找树的建立的时间复杂度

根据算法可以直观的推测出他们的算法复杂度为O(nlogn)但这并不精确。我们以下推导为O(n)首先关于堆首先这个循环是从i = headsize/2 -> 1,也就是说这是一个bottom-up的建堆。于是,有1/2的元素向下比较了一次,有1/4的向下比较了两次,1/8的,向下比较了3次,......,1/2^k的向下比较了k次,其中1/2^k 由等比数列求和后再求1/

2015-08-09 18:31:21 6337 1

原创 堆的应用

第一个是ali的面试题:第一题是本周淘宝上有5亿个商品成交数据,让你找出销量最高的10000个商品。直接想起来优先队列也就是堆。从而引出堆的一个重要的应用------大数据

2015-08-07 13:59:31 432

转载 比较好的博客

http://www.cnblogs.com/huangxincheng/archive/2012/08/06/2625427.html

2015-08-04 19:00:24 409

转载 操作系统文件管理

在现代计算机系统中,要用到大量的程序和数据,因内存容量有限,且不能长期保存,故而平时总是把它们以文件的形式存放在外存中,需要时再随时将它们调入内存。如果由用户直接管理外存上的文件,不仅要求用户熟悉外存特性,了解各种文件的属性,以及它们在外存上的位置,而且在多用户环境下,还必须能保持数据的安全性和一致性。显然,这是用户所不能胜任、也不愿意承担的工作。于是,取而代之的便是在操作系统中又增加了文件管理功

2015-08-04 12:48:39 1486

转载 线性探测法构造哈希表(hash)

以下是用线性探测法构造哈希表的一个具体例子:已知一组关键字为(39,49,54,38,44,28,68,12,06,77),用除余法构造散列函数,用线性探查法解决冲突构造这组关键字的散列表。  解答:为了减少冲突,通常令装填因子α     由除余法的散列函数计算出的上述关键字序列的散列地址为(0,10,2,12,5,2,3,12,6,12)。     前5个关键字插入时,其相应

2015-08-03 21:00:28 7941

转载 位操作

Title:       位操作基础篇之位操作全面总结Author:     MoreWindowsE-mail:      morewindows@126.comKeyWord:   C/C++ 位操作 位操作技巧 判断奇偶 交换两数 变换符号 求绝对值 位操作压缩空间 筛素数 位操作趣味应用 位操作笔试面试位操作篇共分为基础篇和提高篇,基础篇主要对位操作进行全面总结,帮助大

2015-08-01 18:25:48 455

转载 如何阅读深入理解计算机系统

在找工作顺利结束之后,我又回顾了一下之前的标注,结合自己的笔试、面试经历,重新修订了一下。其中应试指标的评分主要是以我的求职目标(互联网行业偏算法的软件工程师)为参照,和其他职位的要求会有些出入。第一章 计算机系统漫游 A Tour of Computer System本章对计算机系统做了一个总体的介绍,用简单明了的语言概括了一些后续章节将要重点展开的概念。应试 ★

2015-08-01 12:02:53 1686

转载 C语言中的int类型的范围是由什么决定的

C语言中的int类型的范围是由什么决定的在 K&R 经典教材 The C Programming Language 的2.2节中,对 int 类型是这样描述的an integer, typically reflecting the natural size of integers on the host machine意思是反映了机器整数类型的 natural size

2015-07-30 08:01:30 609

转载 快速排序解析

快速排序法原理也是用了分治法,主要原理是将数组分为A[p..q-1] 和A[q+1..r],然后调整元素使得A[p..q-1]小于等于q,也小于等于A[q+1..r]。然后不断的递归,到最后就排序完成。上代码:[cpp] view plaincopy// QuickSort.cpp : 定义控制台应用程序的入口点。  //    

2015-07-28 09:39:32 301

原创 递归:解决汉诺塔问题(数据结构3.2 P103)

关于汉诺塔问题我思考了一段时间。最后总结原因之前想不明白还是对递归问题没有深入理解。我的另一篇博文《递归详解》已经很好的介绍了递归的原理。分析汉诺塔问题:由以下三步组成1 用C做过度,将A柱上的n-1个盘子直接移到C柱上2 将A柱上的最后一个盘子移动到C柱上。3  用A做过度,将B柱上的n-1个盘子直接移到C柱上由此将移动n个盘子的汉诺塔问题归结为移动n-1

2015-07-26 16:31:08 1691

原创 递归详解

递归详解

2015-07-26 15:09:45 774

转载 union

在C/C++程序的编写中,当多个基本数据类型或复合数据结构要占用同一片内存时,我们要使用联合体;当多种类型,多个对象,多个事物只取其一时(我们姑且通俗地称其为“n 选1”),我们也可以使用联合体来发挥其长处。首先看一段代码:union myun{struct { int x; int y; int z; }u;int k;}a;int main(){a.u.

2015-07-26 09:35:50 338

转载 2.6静态链表

殷人昆的数据结构那本书所用的静态链表无法区别链表尾和数组尾。所以采用这种结构。静态链表相当于是用一个数组来实现线性表的链式存储结构,大概结构图如下                                    在静态链表中,每一个结点包含两部分内容,一部分是data(即有意义的数据),另一部分是cur(存储该元素下一个元素所在数组对应的下标)。有几个特殊

2015-07-25 11:54:20 373

转载 C++动态内存分配(堆)

1.堆内存分配 :C/C++定义了4个内存区间:    代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store)。堆的概念:通常定义变量(或对象),编译器在编译时都可以根据该变量(或对象)的类型知道所需内存空间的大小,从而系统在适当的时候为他们分配确定的存储空间。这种内存分配称为静态存储分配;

2015-07-24 11:36:34 3447

原创 第十五章 15.2.2定义派生类 派生类构造函数 P531

首先说明:由于构造函数不能被继承,因此,派生类的构造函数中除了对派生类中数据成员进行初始化外,还必须通过调用直接基类的构造函数来对基类中数据成员初始化。一般地将,对派生类中数据成员初始化放在该派生类构造函数的函数体内,而调用基类构造函数的基类中数据成员初始化放在该构造函数的成员初始化表中。派生类构造函数的格式如下表示:

2015-07-23 22:55:33 556

原创 第二章 习题2.1-3 查找线性表

查找线性表#include using namespace std; int main() { int A[5]={2,6,3,5,1}; int v=7; for (int i=0;i<6;++i) { if (i==5) { cout<<"v=null"<<endl; } else if (i<5&&A[i]==v) { cout<<i<<en

2015-07-23 12:11:09 380

原创 算法导论实验:第二章插入排序 P10

#include using namespace std; int main() { int A[5]={2,6,3,5,1}; int i,j; int a; for (j=1;j<5;++j) { a=A[j]; i=j-1; while (i>=0&&A[i]>a) { A[i+1]=A[i]; i=i-1; } A[

2015-07-23 11:49:04 361

转载 第十五章:动态绑定

声明:转载来源:http://blog.csdn.net/chgaowei/article/details/6427731觉得这篇文章很好就转载过来。为了支持c++的多态性,才用了动态绑定和静态绑定。理解他们的区别有助于更好的理解多态性,以及在编程的过程中避免犯错误。需要理解四个名词:1、对象的静态类型:对象在声明时采用的类型。是在编译期确定的。2、对象的动态类型:目前所指对象

2015-07-23 08:02:26 286

空空如也

空空如也

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

TA关注的人

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