- 博客(16)
- 资源 (1)
- 收藏
- 关注
原创 工厂模式
面向对象系统的分析和设计实际上追求的就是两点:高内聚(Cohesion)、低耦合(Coupling),而为了达到这样的目的,我们会抽象出一些类的公共接口以形成抽象基类或接口,这样我们就可以通过声明一个指向基类的指针来指向实际的子类实现,达到多态的目的。 但是这样会造成一个问题:当有许多子类继承自抽象基类,我们每一次使用子类都需要编写如: Figure* figure1 =
2014-06-12 21:43:53
555
原创 Linux内核链表
链表是一种常用的数据结构,早在大一学C语言的时候就已经学过,之后又在数据结构、算法等课上多次提及和使用。但是最近在学习Linux的内核,发现在Linux内核中的链表跟我们平常所使用的链表有很大的不同,现来总结一下。 首先,我们之前所使用的链表的每一个结点都是一样的。无论是单向链表还是双向链表、还是循环链表,使用链表之前都要声明一个结构体Node,在Node中存放数据域和指针域,以双向链表
2014-05-05 21:41:43
651
原创 《算法导论》学习笔记(5)——动态规划:最长子序列
动态规划,是一种通过组合子问题的解来求解原问题的方法,应用于子问题重叠的情况,即不同的子问题具有公共的子子问题。对于这种问题,很容易想到用分治的方法,但是分治的缺点,是会做许多不必要的工作,而且会反复求解那些公共子子问题。而动态规划对每个子问题只求解一次,将其解保存在一个表格中,从而无需每次求解一个子子问题都重新计算,避免了这种不必要的计算工作。 动态规划算法的设计通常为以下四个步
2014-05-01 16:13:12
1310
原创 《算法导论》学习笔记(4)——红黑树
红黑树是一棵搜索二叉树,它在每个结点上增加一个存储位来表示结点的颜色(红或黑)。 红黑树的每个结点都有如下五个属性:color、key、left、right、parent 红黑树必须满足如下5个性质: ①每个结点的颜色或是红色,或是黑色 ②根结点是黑色 ③每个叶结点是黑色的
2014-04-27 21:17:32
848
原创 EffectiveC++读书笔记(2)条款4、5、6
条款04:确定对象被使用前已被初始化 内置类型、STL 对于内置类型,像int、double等,其初始值都是垃圾值。书中建议:永远在使用对象之前先将它初始化。 而对于STL来说,C++已经为这些容器提供了构造函数,会自动地初始化,我们可以直接使用而可以不初始化。 自定义类 确保
2014-04-11 18:48:39
677
原创 EffectiveC++读书笔记(1)条款1、2、3
条款01:视C++为一个语言联邦 C++的四个次语言 ①C ②Object-OrientedC++ ③Template C++ ④STL C++是个多重范型编程语言,同时支持过程形式、面向对象形式、函
2014-04-08 00:46:44
643
原创 《算法导论》学习笔记(3)——二叉搜索树
二叉搜索树是以一棵二叉树来组织的。在二叉树的基础上,增加了一些限制:对于任何结点x,其左子树的任何结点都不大于x.key,右子树的任何结点都不小于x.key。二叉树与二叉堆: 二者都是基于二叉树来构建的数据结构,但是二者的区别在于:二叉堆(最大堆)的每个结点的值都大于等于其两个儿子的值,二叉查找树的父亲是小于等于其右孩子的。如下图:基
2014-03-21 22:33:57
829
原创 《算法导论》学习笔记(2)——快速排序
快速排序,是一种基于分治思想的排序算法。分治,简单来说就是“大事化小”,从而达到最基本的问题,然后再将其合一。 在快速排序算法中,每次需要把一个数组A[p...r]分为三部分:A[p...q-1] A[q] A[q+1...r]而对两个子数组:A[p...q-1]和A[q+1...r]的要求却很少:只需要满足A[p...q-1]中的每个元素都小于等于A[q],A[
2014-03-05 20:22:37
785
原创 位运算的小问题
之前学习c语言的时候课程中并没有介绍过位操作,关于位操作也是之后零零散散地遇到。最近又遇到了一个问题,索性就总结一下吧。 问题大概是这样的:unsigned char x = 0xf4;printf( "%x",~x ); 输出是什么?? 之前以为是 b。因为16进制 f4 = 1111,0100,取反之后是 0000,1011
2014-03-04 00:20:08
840
原创 《算法导论》学习笔记(1)——堆与堆排序
堆排序( Heapsort )是指利用“堆”这种数据结构所设计的一种排序算法。 堆是一种数据结构,是一个数组。它可以被看成一个近似的完全二叉树,树上的每一个结点对应数组中的一个元素。除了最底层外,即叶子结点,该树是完全充满的,而且是从左到右填充。 最大堆的每个结点都要满足堆的性质,此外还有其他的约束:堆中的最大元素存放在根结点中,并且在任一子树中,该子树所包
2014-02-09 16:38:50
795
原创 海明码的编码和校验
海明码(Hamming Code),即汉明码,是一种纠错码。可以在数据传输中发生错误时,查找出出错的位置,从而纠正错误。需要强调的是,海明码只能纠错一位,当有多位出错时,是纠不了的。 下面以发送二进制数据:1011 0110 为例,简述海明码的工作原理。发送方 步骤一、往数据中插入校验码,先用字母代替。A插在第1个位置,B插
2014-01-27 23:04:35
2775
原创 实现中缀表达式到后缀表达式的转换
题目要求:完成Java程序设计 要求:实现中缀表达式到后缀表达式的转换,为InfixToPostfix类实现convertExpr(String expression),其中参数expression为中缀表达式,其返回值为后缀表达式,最后将其输出到控制台即可。中缀表达式符合人们平时的表达习惯,如:(1+2)*(9-5)。但是计算机在计算这样的表达式时却不会像我们人类一样的思维,而
2013-09-23 21:42:45
1521
最佳调度问题的回溯算法
2016-02-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人