摘要: 二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。深度优先遍历二叉树。1. 中序遍历(LDR)的递归算法:若二叉树为空,则算法结束;否则: 中序遍历根结点的左子树; 访问根结点; 中序遍历根结点的右子树。2. 前序遍历(DLR)的递归算法:若二叉树为空,则算法... 阅读全文
posted @ 2013-05-24 10:23 芒刺 阅读(658) 评论(0) 推荐(0) 编辑
摘要: 1、糖果传递问题:老师准备了一堆糖果,恰好n个小朋友可以分到数目一样多的糖果.老师要n个小朋友去拿糖果,然后围着圆桌坐好,第1个小朋友的左边是第n个小朋友其他第i个小朋友左边是第i-1个小朋友。大家坐好后,老师发现,有些小朋友抢了很多的糖果,有的小朋友只得到了一点点糖果,甚至一颗也没有,设第ai个小朋友有ai颗糖果.小朋友们可以选择将一些糖果给他左边的或者右边的小朋友,通过”糖果传递”最后使得每个小朋友得到的糖果数是一样多的,假设一颗糖果从一个小朋友传给另一个小朋友的代价是1,问怎样传递使得所耗的总代最小。这道题完全是数学方法,设第i个小朋友分给第i-1个小朋友的糖果数为Pi(注意,Pi可正可 阅读全文
posted @ 2013-05-10 10:20 芒刺 阅读(324) 评论(0) 推荐(0) 编辑
摘要: 前两天,睡觉前,偶尔翻起算法导论,看到随机函数这一块内容,里面有一个练习题.5.1-2 描述random(a,b)过程的一种实现,它只调用random(0,1).作为a和b的函数,你的程序的期望运行时间是多少?注:random(a,b)为产生a,a+1,a+2,...,b的函数发生器,且产生各整数的概率相等,同为1/(b - a + 1).看到这个题目时,似曾相识,脑海浮现了利用random(0,1)产生0或1,从而组成二进制数,来完成random(a,b)的实现.但是细想以后,感觉有个问题在脑海中有点不明不白.运行random(0,1)函数k次,使得2k>=(b-a+1),将得到[0, 阅读全文
posted @ 2013-05-07 10:38 芒刺 阅读(219) 评论(0) 推荐(0) 编辑
摘要: 1.HashMap的数据结构 数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——拉链法,我们可以理解为“链表的数组”,如图: 从上图我们可以发现哈希表是由数组+链表组成的,一个长度为16的数组中,每个元素存储的是一个链表的头结点。那么这些元素是按照什么样的规则存储到数组中呢。一般情况是通过hash(key)%len获得,也就是元素的key的哈希值对数组长度取模得到。比如上述哈希表中,.. 阅读全文
posted @ 2013-05-02 19:43 芒刺 阅读(165) 评论(0) 推荐(0) 编辑
摘要: http://blog.csdn.net/zhengzhb/article/category/926691/ 阅读全文
posted @ 2013-05-02 09:29 芒刺 阅读(103) 评论(0) 推荐(0) 编辑
摘要: http://www.cnblogs.com/LeoTerry/archive/2010/03/26/1696988.html一、内连接内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分三种:1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。2、不等连接:在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括>、>=、、!。3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中 阅读全文
posted @ 2013-04-26 11:58 芒刺 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 大家都容易把这两者搞混,我也一样,在听李建忠老师的设计模式时,他也老把抽象类说成接口,弄的我就更糊涂了,所以找了些网上的资料. 一、抽象类: 抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实... 阅读全文
posted @ 2013-04-26 09:43 芒刺 阅读(117) 评论(0) 推荐(0) 编辑
摘要: 1、ISO开放系统有以下几层:7应用层6表示层5会话层4传输层3网络层2数据链路层1物理层2、TCP/IP 网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。通信过程中,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。其实在链路层之 阅读全文
posted @ 2013-04-22 11:32 芒刺 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 以下是国嵌唐老师对2013腾讯实习笔试部分题目的解析!1)32位机上根据下面的代码,问哪些说法是正确的?(C) signed char a = 0xe0; unsigned int b = a; unsigned char c = a; A. a>0 && c>0 为真 B. a == c 为真 C. b 的十六进制表示是:0xffffffe0 D.上面都不对解析:这个题目涉及到 有符号数和无符号数之间的转换0xe0的最高位是1,因此作为有符号数就是负数,作为无符号数就是正数所以 A 肯定是错的, B也错,c = 0xe0是正数,原因是正数和负数怎么可能相等呢,C是 阅读全文
posted @ 2013-04-19 19:23 芒刺 阅读(393) 评论(0) 推荐(0) 编辑
摘要: 1.今天写线程函数时,发现msdn中对ThreadProc的定义有要求:DWORD WINAPI ThreadProc(LPVOID lpParameter);不解为什么要用WINAPI宏定义,查了后发现下面的定义。于是乎需要区别__stdcall和__cdecl两者的区别; #define CALLBACK __stdcall#define WINAPI __stdcall#define WINAPIV __cdecl#define APIENTRY WINAPI#define APIPRIVATE __stdcall#define PASCAL __stdcall#define cdecl 阅读全文
posted @ 2013-04-18 20:25 芒刺 阅读(184) 评论(0) 推荐(0) 编辑