自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 寻找数组中最小的K个元素

<br />快速排序思想的经典变形--先找到数组的pivot,然后使用二分法进行递归找到数组中第K小的元素,算法时间复杂度与快排一样为O(nlogn);然后线性扫描原数组找到所有不大于它的元素,此步骤复杂度为O(n),因而算法总时间复杂度为O(nlogn) + O(n) = O(nlogn)。实现中需要注意边界条件,很容易写错导致程序死循环。以下是C++完整实现:<br /> <br />#include <iostream> using namespace std; template<class T>

2011-05-20 21:57:00 1042

原创 寻找二叉树中和为固定值的从根节点到叶节点的所有路径

<br />题目:输入一个整数和一棵二元树。<br /> 从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。<br /> 打印出和与输入整数相等的所有路径。<br /> 例如 输入整数22和如下二元树<br />   10  <br />   / /   <br />  5  12   <br />  / /   <br /> 4   7<br /> 则打印出两条路径:10, 12和10, 5, 7。<br /> <br />struct BinaryTreeNode {

2011-05-20 20:55:00 2599

原创 求子数组最大和

<br />输入一个整形数组,数组里有正数也有负数。<br /> 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。<br /> 求所有子数组的和的最大值。要求时间复杂度为O(n)。<br />例如输入的数组为1, -2, 3, 10, -4, 7, 2, -5,和最大的子数组为3, 10, -4, 7, 2,<br /> 因此输出为该子数组的和18。<br /> <br />int MaxSubArray(int T[], int size) { int max = 0, tmp

2011-05-20 17:44:00 686

原创 实现包含min函数的栈

<br />要求实现一个带有min函数的堆栈,且push,pop以及min操作时间复杂度为O(1)。<br />思路:<br />在数据栈的基础上需要另一个辅助堆栈来存储当前最小元素的位置。新元素进栈时,将该元素与当前最小元素比较,若比当前最小元素还要小,则将新栈顶位置入辅助栈;否则仍然将原最小元素位置入辅助栈。出栈操作很简单,直接对两个栈进行pop操作。以下是该思路的C++实现,实现中采用了STL的deque容器,原因在于deque支持index操作。<br /> <br />#include <dequ

2011-05-20 17:25:00 1137

原创 Convert Binary Search Tree to an Ordered Double Linked List

<br />输入: 一棵二叉查找树<br /><br />输出: 与二叉查找树对应的有序双向链表<br /><br />要求:不允许额外生成节点,只允许调整指针指向。例如:<br />   <br />  10<br />   / /<br />   6   1<br />   / / / /<br />    4  8 12 16<br /><br /> 要求变换后输出<br /><br /><br />4=6=8=10=12=14=16<br /> <br />个人思路:<br /><br

2011-05-20 00:01:00 1092

原创 setjmp & longjmp in C language

最近几天重新把尘封已久的那本Expert C Porgramming拿出来又扫了一遍,发现以前遗漏了好多C语言的特性,看来之前那遍是白看了。书中第六章:运行时数据结构有一小节专门拿出来讲ISO C中的setjmp和longjmp。根据书上的说法,它是为了增强C有限的跳转能力而设的,与goto主要有两点不同: 第一点是goto只能当前函数内跳转,而longjmp允许跳转到其他文件的函数中。但是另一方面,longjmp也有自己的局限性,它只允许“故地重游”,也就是说,longjmp跳转的目标地点之前曾经执行过。

2011-05-08 23:35:00 792

原创 Interruption Management in Windows CE

Windows CE是一个层次结构的分明的嵌入式操作系统:BSP (Board Support Package)位于硬件层之上,该层内部包括三大部分,一是OAL (OEM Adaption Layer),二是硬件驱动程序,也就是所谓的driver,剩下第三个子模块就是Bootloader了,它的作用有点类似于普通PC的BIOS程序。BSP由产品制造商开发,提供硬件和操作系统内核间联系的桥梁。BSP层向上就是Windows CE的内核了,由微软开发,是整个操作系统的指挥中心。既然是内核,其功能也无外乎进程线程

2010-11-21 20:01:00 871

原创 编程之美笔记——金刚坐飞机

<br />昨天看到一道题目,问题描述是这样的:<br /> <br />100个人排队上飞机,飞机上有100个座位,每个人对应一个座位,队首的人是个瞎子,上飞机后随便坐,后面的人都尽量找自己的座位,如果已经被占,则随机做,问第100个人坐到自己座位的概率。<br /> <br />开始想从第一个人开始递推,结果此路不通。后来google了一下发现有人说这是编程之美上的题目,遂找了份电子版翻了翻,里面“金刚坐飞机”这一小节讲述了该问题的解法。看了其分析过程得到解题启发,上题其实就是书中得出的一般结论的特殊情

2010-11-14 00:09:00 4389 4

原创 Range Minimum Query

<br />Range Minimum Query is used on arrays to find the position of an element with the minimum value between two specified indices. This problem can be solved in many different ways, such as dynamic programming, segment tree, ect. Here shows the C++ imple

2010-09-16 20:34:00 853

原创 如何从托管代码调用DLL中的非托管代码

<br />最近在公司实习接到一个新的项目需求,大体说来,需要实现C++与C#语言之间的互操作。听起来有点抽象,其实就是能够用C++代码调用.NET平台FCL中的工具类,而C#代码也能够反过来调用C/C++编写好的DLL中的函数。<br /><br /><br />C++调用DOTNET基础类库很容易,毕竟DOTNET平台就是为实现language independant这个目标而设计的,它通过C++/CLI为传统的C++语言能够在全新平台下工作提供了强有力的支持。我们只需要稍稍改动一下代码语法,再将函数手

2010-09-08 00:03:00 3163 1

原创 .NET框架下编程语言的互操作性

.NET架构让不同的编程语言如C#,Visual Basic.NET及C++等之间的相互调用成为了可能。在.NET框架下,所有高级语言都会先编译成中间语言(MSIL),这个阶段和Java源代码首先被编译成Java字节码类似;而从中间语言到本地机器码这个过程是在程序运行时完成的,也就是所谓的JIT技术。正是IL的出现,使得.NET具备了平台无关性和语言无关性两大主要特征。下面演示如何在.NET框架下实现不同语言间的通信。以下三个代码段摘自PROGRAMMING MICROSOFT .NET一书Chapter

2010-08-25 23:55:00 2335

转载 代码自动生成-宏带来的奇技淫巧

<br />众多C++书籍都忠告我们C语言宏是万恶之首,但事情总不如我们想象的那么坏,就如同goto一样。宏有一个很大的作用,就是自动为我们产生代码。如果说模板可以为我们产生各种型别的代码(型别替换),那么宏其实可以为我们在符号上产生新的代码(即符号替换、增加)。关于宏的一些语法问题,可以在google上找到。相信我,你对于宏的了解绝对没你想象的那么多。如果你还不知道#和##,也不知道prescan,那么你肯定对宏的了解不够。我稍微讲解下宏的一些语法问题(说语法问题似乎不妥,macro只与preproces

2010-08-22 17:44:00 1671

原创 函数调用约定__stdcall与__cdecl

在Windows编程中,我们经常看到如int WINAPI _tWinMain(HINSTANCE hInstanceExe, PSTR pszCmdLine, int nCmdShow)这样的函数定义,它被WINAPI所修饰。WINAPI其实是一个宏,我们可以在WinDef.h中找到它的定义:#define WINAPI      __stdcall__stdcall是函数调用约定。所谓函数调用约定,其实是主调和被调函数间的协议,该协议事先约定好函数参数以什么顺序依次压栈,以及函数调用结束后由谁来完成

2010-06-27 01:43:00 1213 1

原创 输出指定范围内的所有质数

#include #include #include using namespace std; void printPrimerUpTo(std::ostream& os,int upper); int getDigitNum(int upper); int main(void) { ofstream outfile("primer.txt"); if(!outfile) { cerr

2010-06-17 17:16:00 5893

原创 构造函数、复制构造函数和赋值操作符的调用

C++中构造函数、复制构造函数和赋值操作符三者分别何时被调用很容易让人犯迷糊,下面结合例子就这个问题讨论一下。 假设我们有如下代码段:#include #include using namespace std;class Foo {public: Foo() { cout << "Foo constructor" << endl; } Foo(cons

2010-05-26 03:53:00 3103 2

原创 论指针和数组的区别

在C/C++中,指针的使用的确是一个让人头疼的问题,稍有不慎程序就运行时崩溃。最近又看到很多人纠结于指针问题,下面就结合这些问题谈谈。 一个最普遍的问题就是很多人认为指针完全可以和数组进行互换,关于这一点《C专家编程》的作者已经在第四、第九和第十章中作了详细阐述。其结论就是我们不能混淆指针和数组这两个完全不同的概念,它们可互换是有条件的。 我们在程序中使用数组大致有4种情况

2010-04-17 05:54:00 990

原创 Java与C++的浅层次区别

本文总结自Core Java Fundamentals一书,不断更新。这里只涉及表象,暂不探讨两种语言更深层次上的区别以及运行机制方面的差异。 1- Java的class和C++的Class基本类似,但是Java里任意一个方法都必须包含在类中,这里包括main函数,C++可不是这样。除此之外,Java的main方法不返回exit code给操作系统。 2- C++内建数据类型实

2010-04-16 23:02:00 1143

原创 用Eclipse搭建C/C++开发平台

谈到Eclipse这个开源IDE,大家都会潜意识地把它和JAVA开发联系起来。没错,Eclipse用于JAVA application的开发是目前的主流,而且它本身也是需要JRE才能运行的,因而无论怎么看Eclipse都与JAVA有密不可分的联系。 但实际上Eclipse只是一个开发环境,一个为程序员提供的框架,与语言并无直接联系。自从2001年IBM将Eclipse捐献出来后,该项目得到了极大发

2010-04-13 22:45:00 6836 1

转载 《编程之美》读书笔记(二):“求二进制数中1的个数”扩展问题

面试题目:对于一个字节(8bit)的变量,求其二进制表示中“1”的个数。扩展问题:给定两个正整数(二进制形式表示)A和B,问把A变为B需要改变多少位(bit)?也就是说,整数A和B的二进制表示中有多少位是不同的?把两个整数A, B异或,然后又回归到判断1的个数,代码如下:int Count(int a, int b) { int num = 0; int

2010-04-11 22:53:00 1683

转载 《编程之美》读书笔记(一):中国象棋将帅问题

这一个系列的读书笔记本来是写在CSDN的博客上的,本来是不应该再费力气转移到这里来,但是总觉得对于好书应该给予更多的支持。更何况邹老师和其他作者把部分书稿费拿出来资助贫困小学,实在是应该大力提倡。所以决定把我的部分Blog内容搬迁到这里来,不能全拿过来只是因为评论不能贴图,呵呵。希望也能以此为契机敦促自己把原本计划中的读书笔记写完,也算完成自己的一个心愿。  大

2010-04-11 22:29:00 1153 1

原创 const in C++

昨天看Bruce Eckel的Thinking in C++,上面谈到了const folding的问题,大家对中文版把该术语翻译成“常量折叠”意见挺大的,先不管怎么翻,内在意思就是编译器在编译时可以通过必要的计算把一个复杂的常量表达式通过缩减简单化。开始时觉得不大明白,接着又搜出下面一段比较有代表性的代码:#include using namespace std;int main

2008-07-18 14:48:00 602

空空如也

空空如也

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

TA关注的人

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