摘要: 要求:输入一棵二叉排序树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建新的结点,只能调整树中结点的指针的指向。 方法一:我们借助一个容器来顺序存储结点的指针,然后改变指针的指向。 方法二:我们边遍历边改变指针的指向。 阅读全文
posted @ 2014-05-07 22:36 月轩 阅读(1116) 评论(0) 推荐(0) 编辑
摘要: 流操作符、赋值操作符=的返回值、拷贝构造函数的参数、赋值操作符=的参数、递归函数的形参都推荐使用引用。 阅读全文
posted @ 2014-05-07 20:15 月轩 阅读(110) 评论(0) 推荐(0) 编辑
摘要: 实现要点: 1.组合模式采用树形结构来实现普遍存在的对象容器,从而将“一对多”的关系转化“一对一”的关系,使得客户代码可以一致地处理对象和对象容器,无需关心处理的是单个的对象,还是组合的对象容器。 2.将“客户代码与复杂的对象容器结构”解耦是组合模式的核心思想,解耦之后,客户代码将与纯粹的抽象接口——而非对象容器的复内部实现结构——发生依赖关系,从而更能“应对变化”。 3.组合模式中,是将“Add和Remove等和对象容器相关的方法”定义在“表示抽象对象的Component类”中,还是将其定义在“表示对象容器的Composite类”中,是一个关乎“透明性”和“安全性”的两难问题,需要仔细权衡。这里有可能违背面向对象的“单一职责原则”,但是对于这种特殊结构,这又是必须付出的代价。 4.组合模式在具体实现中,可以让父对象中的子对象反向追溯;如果父对象有频繁的遍历需求,可使用缓存技巧来改善效率。 5. 客户端尽量不要直接调用树叶类的方法,而是借助其父类(Component)的多态性完成调用,这样可以增加代码的复用性。 使用场景: 以下情况下适用组合模式: 1.你想表示对象 阅读全文
posted @ 2014-05-07 16:21 月轩 阅读(159) 评论(0) 推荐(0) 编辑
摘要: 实现一个函数复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL。 阅读全文
posted @ 2014-05-06 21:06 月轩 阅读(129) 评论(0) 推荐(0) 编辑
摘要: 权限其实就是对类成员的可访问性。 阅读全文
posted @ 2014-05-05 22:17 月轩 阅读(691) 评论(0) 推荐(0) 编辑
摘要: 输入一个二叉树,查找该树的所有路径(从根结点到叶结点的通路),并返回和(路径上所有结点值的和)为某一指定值的路径。 阅读全文
posted @ 2014-05-05 22:03 月轩 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 在实际软件系统设计和开发中,会经常遇到这种问题:我们为了完成某项工作购买了一个第三方的库来加快开发。 这就带来了一个问题: 我们在应用程序中已经设计好了接口,与这个第三方提供的接口不一致,为了使得这些接口不兼容的类可以在一起工作,Adapter 模式提供了将一个类(第三方库)的接口转化为客户(购买使用者)希望的接口。 阅读全文
posted @ 2014-05-04 21:19 月轩 阅读(227) 评论(0) 推荐(0) 编辑
摘要: 要求:从上往下打印二叉树的每个结点,同一层的结点按照从左到右的顺序打印。 算法思想:每一次打印一个结点的时候,如果该结点有子结点,则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直到队列中所有的结点都被打印出来为止。 阅读全文
posted @ 2014-05-04 20:14 月轩 阅读(142) 评论(0) 推荐(0) 编辑
摘要: Bridge 模式将抽象和行为划分开来,各自独立,但能动态的结合。在面向对象设计的基本概念中,对象这个概念实际是由属性和行为两个部分组成的,属性我们可以认为是一种静止的,是一种抽象,一般情况下,行为是包含在一个对象中,但是,在有的情况下,我们需要将这些行为也进行归类,形成一个总的行为接口,这就是桥模式的用处。 阅读全文
posted @ 2014-04-30 22:08 月轩 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 定义栈的数据结构,在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min , push , pop 的时间复杂度都是O(1)。 阅读全文
posted @ 2014-04-30 15:54 月轩 阅读(171) 评论(0) 推荐(0) 编辑
摘要: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如:输入矩阵 {1, 2, 3, 4 } {5, 6, 7, 8 } {9, 10, 11, 12 } {13, 14, 15, 16 } 输出:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 代码如下: 阅读全文
posted @ 2014-04-29 22:49 月轩 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 在许多情况下,在基类中不能对虚函数给出有意义的实现,而把它声明为纯虚函数,它的实现留给该基类的派生类去做。这就是纯虚函数的作用。 阅读全文
posted @ 2014-04-28 20:52 月轩 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 完成一个函数,输入一个二叉树,该函数输出它的镜像。 阅读全文
posted @ 2014-04-28 19:54 月轩 阅读(150) 评论(0) 推荐(0) 编辑
摘要: Prototype 模式提供了一个通过已存在对象进行新对象创建的接口(Clone) ,Clone()实现和具体的实现语言相关,在 C++中我们将通过拷贝构造函数实现之。 阅读全文
posted @ 2014-04-28 16:47 月轩 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 曾有一段时间,一些幽默的程序员把各门语言比作女人,其中Java 是一个精于计算的生意场上的女人、Lisp 将会成为你事业上的导师,能在任何事情上为您提供理论方案,让你佩服的五体投地。倘若把编程语言比作人类,那么,他们在一起聚餐,会聊些什么呢? 阅读全文
posted @ 2014-04-28 16:27 月轩 阅读(194) 评论(0) 推荐(0) 编辑