自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 B树

B树       即二叉搜索树:       1.所有非叶子结点至多拥有两个儿子(Left和Right);       2.所有结点存储一个关键字;       3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;       如:              B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,

2013-08-19 14:53:19 591

转载 Huffman树

1 Huffman树Huffman树又称最优二叉树,是一类带权路径长度最短的树。路径是指从树中一个节点到另一个节点之间的通路,路径上的分支数目称为路径长度。树的路径长度为从树根到每个叶节点之间的路径长度之和。节点的带权路径长度为从该节点到树根之间的路径长度与该节点权的乘积。树的带权路径长度为树中所有叶节点的带权路径长度之和。2 构造Huffman树的算法1 给定n个节点

2013-08-19 14:48:07 1248

转载 static_cast、dynamic_cast reinterpret_cast和const_

关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++之父的《C++的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast,dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。下面对它们一一进行介绍。static_

2013-08-19 11:17:32 329

转载 重载(Overload)和重写(Override)的区别

1,重载(Overloading) (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。重载Overloading是一个类中多态性的一种表现。(2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就

2013-08-19 11:13:04 443

转载 new/delete和malloc/free

new/delete与malloc/free的详解 作者:华清远见武汉华嵌 技术支持 曹伟东 内容清单: 1. C 语言中的函数 malloc 和 free 2. C++ 中的运算符 new 和 delete 3. new/delete 与 malloc/free 之间的联系和区  new/delete与malloc/free的详解作者:华清远见武汉华嵌技术支持曹伟东内容清单:

2013-08-19 11:11:29 517

转载 c++引用与指针的区别(着重理解)

★ 相同点:    1. 都是地址的概念;    指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名。    ★ 区别:    1. 指针是一个实体,而引用仅是个别名;    2. 引用使用时无需解引用(*),指针需要解引用;    3. 引用只能在定义时被初始化一次,之后不可变;指针可变;    引用“从一而终” ^_^    4. 引用没有 con

2013-08-19 11:07:24 336

转载 递归函数时间复杂度分析

(1) 递归执行过程    例子:求N!。     这是一个简单的"累乘"问题,用递归算法也能解决。     n! = n * (n - 1)!   n > 1     0! = 1, 1! = 1      n = 0,1     因此,递归算法如下:    Java代码 fact(int n) {      if(n == 0 || n == 1) 

2013-08-15 15:16:56 409

转载 字符串代替、字符串转换整数

#include "stdafx.h"  using namespace std;  //--------字符替代问题  char* Translate(char* pSrc, const char cFindChar, const char* pReplaceStr, char* pTag)     {              char* p = NULL ;

2013-04-16 10:46:47 375

转载 KMP算法详解(转)

引记    此前一天,一位MS的朋友邀我一起去与他讨论快速排序,红黑树,字典树,B树、后缀树,包括KMP算法,唯独在讲解KMP算法的时候,言语磕磕碰碰,我想,原因有二:1、博客内的东西不常回顾,忘了不少;2、便是我对KMP算法的理解还不够彻底,自不用说讲解自如,运用自如了。所以,特再写本篇文章。由于此前,个人已经写过关于KMP算法的两篇文章,所以,本文名为:KMP算法之总结篇。   本文分

2013-04-16 10:25:49 400

转载 AC自动机

AC自动机简介: 首先简要介绍一下AC自动机:Aho-Corasick automation,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一。一个常见的例子就是给出n个单词,再给出一段包含m个字符的文章,让你找出有多少个单词在文章里出现过。要搞懂AC自动机,先得有字典树Trie和KMP模式匹配算法的基础知识。KMP算法是单模式串的字符匹配算法,AC自动机是多模式串的字符匹配算法。

2013-04-16 10:20:52 426

转载 Java synchronized详解

第一篇:使用synchronized在编写一个类时,如果该类中的代码可能运行于多线程环境下,那么就要考虑同步的问题。在Java中内置了语言级的同步原语--synchronized,这也大大简化了Java中多线程同步的使用。我们首先编写一个非常简单的多线程的程序,是模拟银行中的多个线程同时对同一个储蓄账户进行存款、取款操作的。在程序中我们使用了一个简化版本的Account类,代表

2013-04-15 14:25:53 362

转载 理解面向对象

1.编程模型所有计算机均由两种元素组成:代码和数据.精确的说,有些程序是围绕着"什么正在发生"而编写,有些则是围绕"谁正在受影响"而编写的.第一种编程方式叫做"面向过程的模型",按这种模型编写的程序以一系列的线性步骤(代码)为特征,可被理解为作用于数据的代码.如 C 等过程化语言.第二种编程方式叫做"面向对象的模型",按这种模型编写的程序围绕着程序的数据(对象)和针对该对象而严格定义的

2013-04-12 22:13:50 387

转载 java source对atoi的实现

问题:把一个字符串转成一个整数。思路:其实,这道题考的不是怎么去把一个数转成一个整数,而是考你是否能够把所有的情况都考虑完全,我们应该考虑的因素如下:1. 这个字符串是否是空的。2. 这个字符串是否有非法字符(非0-9之间的字符)。3.这个数是正数或者是负数的情况(第一个字符是否为+,-)。4. 是否存在溢出的情况(这个比较难考虑到)。[java]

2013-04-12 22:07:50 391

转载 判断一个链表是空链表还是循环链表

使用快慢指针判断的好处是:可以防止如果链表是类似“6”的,形状,也就是说尾指针不是直接连到头指针,而是它之后的指针,那么这种情况下传统的以头指针作为基准判断是否有循环的方法就可能陷入死循环。    给定一个链表,它可能是以NULL结尾的非循环链表,如图3-5所示;也可能是一个循环结构结尾的循环链表。已知这个链表的头指针,请编写一个函数来判断该链表是一个循环链表还是一个非循环链表,该函数不得对链

2013-04-12 21:59:38 1354

转载 根据后序遍历和中序遍历结果还原二叉树

以前做这种题蛮熟练的,放了两个学期没管它,今天再来做就太.......伤脑子了不过还好,还是想起怎么做了这里把我的方法分享给大家,希望还不会的朋友能有所收获,也希望能得到更好的解决办法【题目】假设一棵二叉树的后序遍历序列为 DGJHEBIFCA ,中序遍历序列为 DBGEHJACIF ,则其前序遍历序列为 ( ) 。A. ABCDEFGHIJB. ABDEGHJ

2013-04-12 14:52:55 795

转载 二叉树性质操作遍历总结

这几天面试都碰到了二叉树,在此将问题总结下,以备今后再遇。参考文献:1. 数据结构与算法分析——c语言描述2. 百度百科http://baike.baidu.com/view/88806.htm  http://baike.baidu.com/view/127820.htm定义:二叉树是一棵树,其中每个节点都不能有多于两个儿子节点性质:1、二叉树的平均深

2013-04-12 14:19:21 554

转载 Java 遍历二叉树(前中后序)

Binary.javaimport java.util.Stack;public class BinaryTree {protected Node root;public BinaryTree(Node root) {   this.root = root;}public Node getRoot() {   return root;}/** 构造树 */

2013-04-12 14:18:20 393

转载 String,StringBuffer与StringBuilder的区别

String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全) 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然后将指针指向新的 String 对象,所以经常

2013-04-12 12:44:05 313

转载 Java 中应用设计模式 -- Singleton

基本概念Singleton 是一种创建性模型,它用来确保只产生一个实例,并提供一个访问它的全局访问点.对一些类来说,保证只有一个实例是很重要的,比如有的时候,数据库连接或 Socket 连接要受到一定的限制,必须保持同一时间只能有一个连接的存在.再举个例子,集合中的 set 中不能包含重复的元素,添加到set里的对象必须是唯一的,如果重复的值添加到 set,它只接受一个实例.JDK中正式运

2013-04-12 12:38:18 373

转载 分析Java的垃圾回收机制

Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。一般来说,堆的是由垃圾回收 来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于内存的有限性,JV

2013-04-12 10:58:43 327

转载 拷贝构造函数/深拷贝和浅拷贝

拷贝构造函数就是构造函数的参数的类型是该构造函数所在的类,即参数就是该类的一个对象。 Example:1.Clock类:public class Clock { private int hour; private int minute; private int second;  public Clock(){  setTime(0,0,0); }

2013-04-11 14:12:21 393

转载 Java数组的复制

初学Java的时候,需要复制数组的时候,一下子就想到使用赋值语句“=”,例如:array1 = array2;但后来慢慢发现,这个语句并不能将array2的内容复制给array1,而是将array2的引用传给了array1.使用array1 = array2 这个语句之后,array1,array2指向了同一个数组,如下图所示:            这样,array2之前所引

2013-04-11 13:09:36 399

转载 继承与接口(二)

接口         Java语言不支持一个类有多个直接的父类(多继承),但可以实现(implements)多个接口,间接的实现了多继承.         接口使用有几点需要注意的:         1、Java接口与c++的纯虚基类类似。成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量(大写,单词之间用"_"分隔)

2013-04-10 21:09:31 550

转载 java继承与接口

java继承与接口         前两天写东西,本来想把定义和实现分开来写的。类A有两个方法f1和f2,想把类A的定义、f1的实现和f2的实现分为三个java文件来写,看了看抽象类和接口。不过貌似都不是搞这个的样子。(求方法)         总结一下,自己看的继承和接口。继承         Java中很基本的概念。如书所言:(1)java不支持多重继承,也就是说子类至多只

2013-04-10 21:08:57 433

转载 strcpy和memcpy的区别

strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。

2013-04-08 16:09:16 335

转载 几种函数调用方式

__cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数不会要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。_stdcall 是StandardCall的缩写,是C++的标准调用方式:所有参数从右到左依次入栈,如果是

2013-04-08 16:01:00 366

转载 Java Hashtable分析

Hashtable的结构,采用的是数据结构中所说的链地址法处理冲突的方法  从上面的结构图可以看出,Hashtable的实质就是一个数组+链表。图中的Entry就是链表的实现,Entry的结构中包含了对自己的另一个实例的引用next,用以指向另外一个Entry。而图中标有数字的部分是一个Entry数组,数字就是这个Entry数组的index。那么往 Hashtable增加键值对的时候,in

2013-04-08 15:40:03 404

转载 各种排序算法比较

1.稳定性比较插入排序、冒泡排序、二叉树排序、二路归并排序及其他线形排序是稳定的选择排序、希尔排序、快速排序、堆排序是不稳定的2.时间复杂性比较插入排序、冒泡排序、选择排序的时间复杂性为O(n2)其它非线形排序的时间复杂性为O(nlog2n)线形排序的时间复杂性为O(n);3.辅助空间的比较线形排序、二路归并排序的辅助空间为O(n),其它排序的辅助空间为O(1);

2013-04-08 15:25:32 452

转载 各种排序算法的稳定性和时间复杂度小结

选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法:  这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡:  复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。直接插入排序:O(n*n)选择排序:O(n*n)快速排序:平均时间复杂度log2(n)*n,

2013-04-08 15:24:44 375

转载 二叉树的恢复

最近笔面老碰上这类题,老忘,因此写个备忘。二叉树的三种遍历常用于恢复:先序,中序,后序。对于先+中,后+中这两种组合,对任意二叉树的恢复都有唯一解,但对先+后的情况则不是,这种情况下要满足要求:对所有非叶节点,其两个子节点都存在,也即,一个节点要么是叶节点,要么有两个节点。典型的恢复方法是递归建构节点的左,右子树。一个一个看:假设二叉树原型如下,为了方便,节点的值刚好等于层次遍历索

2013-04-08 15:18:57 621

转载 栈和堆的区别

一、预备知识―程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) ― 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态

2013-04-08 14:51:20 344

转载 面向对象技术

面向对象技术 (Object-Oriented Technology)面向对象技术强调在软件开发过程中面向客观世界或问题域中的事物,采用人类在认识客观世界的过程中普遍运用的思维方法,直观、自然地描述客观世界中的有关事物。面向对象技术的基本特征主要有抽象性、封装性、继承性和多态性。特征1.抽象性把众多的事物进行归纳、分类是人们在认识客观世界时经常采用的思维方法,“物以类聚,人以群分”

2013-04-07 20:23:53 669

转载 C++拷贝构造函数详解

一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyprint?int a = 100;  int b = a;   int a = 100;int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简

2013-04-07 16:28:39 376

转载 [转]java泛型

介绍在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用

2013-04-07 16:25:54 397

空空如也

空空如也

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

TA关注的人

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