摘要: 本章开始介绍图数据结构和相关的算法。一个图有两个部分组成,跟前面介绍的树结构一样,一部分是节点,在图的术语中也称为顶点(vertex),我们将统一称之为顶点;另一部分是顶点的链接,称为边(edge)。顶点和边之间有着紧密的联系,通常图的任意一对顶点之间都允许有一条边。前几章介绍的链表和树都可以看作是结构首先的图,从这个意义上讲,图是最基本的数据结构。图结构本广泛应用与实际问题的描述和求解,以下几个例子:1.地图的坐标点和坐标点之间的连接及距离,求解坐标点之间的最右路径;2.交通网络流问题;3.通信网络路由算法…………本章将给出以上问题的相关抽象模型和问题的求解算法。包括:术语及描述 .术语及描 阅读全文
posted @ 2012-07-14 11:05 wlu 阅读(861) 评论(0) 推荐(0) 编辑
摘要: 二叉树前序遍历(递归及递推算法)后续遍历(递归及递推算法)中序遍历(递归及递推算法)层序遍历霍夫曼编码深入研究 上面两节内容中,我们讨论了广义树的两种实现方法,及“子节点表”和“最左子节点/右兄弟节点”法。这两种方法所实现的树是多叉树,适用于描述任意的树形结构。本节内容中我们将讨论一种特殊的树,即二叉树。与广义树相比,二叉树具有特定的结构,包括内外节点个数的关系、节点数与树的高度的关系等。本节将着重讨论二叉树的各种遍历算法,包括前序、中序、后序和层序遍历算法。最后,本章将研究一种在信息技术中广泛应用的一种特殊的二叉树,即Huffman树。二叉树的数学性质在讨论二叉树的各种算法之前,我们先详细讨 阅读全文
posted @ 2012-07-14 01:02 wlu 阅读(1908) 评论(0) 推荐(0) 编辑
摘要: 树广义树概念子节点表描述方法树的“左子节点/右兄弟节点”描述方法 本章将扩展前几章的内容,讨论一种较为复杂的数据结构,即树(tree)结构。前面所讨论的线性表、堆栈等数据结构中,跟每个节点相连的节点的个数都是有限的。本章讨论的树结构中,节点可以有任意数目的子节点。这是的数在实际应用中具有更大的作用,但其结构更复杂。树的定义 一棵树T是由一个或一个以上节点组成的有限集合,其中节点有分为根节点、叶节点和中间节点。树具有层结构,根节点(R)之外的节点集合{T-R},可以划分为一些不相交子集{T1,…,Tn}。这些子集又可以分别构成子树,并拥有相应的根节点。一般将位于根节点左边的子节点称作左子节点,位 阅读全文
posted @ 2012-07-14 00:04 wlu 阅读(607) 评论(0) 推荐(0) 编辑
摘要: 堆堆的概念 堆上的算法堆的打印CPU优先级抢占模型 堆是一种数组对象,与之前几章所讨论的内容稍有不同的是,堆中的元素项具有特殊的顺序结构。在本书后面将介绍树数据结构,事实上堆属于一种特殊的树,即完全二叉树。完全二叉树中除了最后一层之外树的每一层都填满。之所以将堆数据结构提前介绍,一方面是因为堆也是一种基本的数据结构。另一方面,堆的一个重要功能是能实现优先队列。上一章中我们刚讨论过队列,所以紧接着在这一章介绍堆以及利用堆实现优先队列。堆的概念假设r[0],r[1],…,r[n-1]是一序列元素,可以看作是数组结构。如果对于任意r[i],同时满足条件r[i]≥r[2*i+1]和r[i]≥r[2*i 阅读全文
posted @ 2012-07-13 23:47 wlu 阅读(533) 评论(0) 推荐(0) 编辑
摘要: 队列顺序队列生产者消费者模型 链式队列 队列(queue)跟上一章中介绍的栈数据结构一样,也是一种操作受限的线性表。栈的操作受限表现在插入和删除只能对栈顶元素进行,删除的元素永远是最新插入的,即操作遵循后入先出(LIFO)原则。这一章将讨论的队列中的操作原则与栈的相反。删除的元素是最早插入到队列中的,就像排队一样,排在最前面的人将最先从队伍中出列。这样的操作原则常常称作先入先出(FIFO,FirstInFirstOut)。由于队列结构和栈结构具有相反的操作原则,我们在的设计队列是将在栈的设计结构的基础上做一定的“反向”调整。本章同样首先介绍队列的ADT,然后介绍两种队列的实现方式:顺序队列和链 阅读全文
posted @ 2012-07-13 23:17 wlu 阅读(1037) 评论(0) 推荐(0) 编辑
摘要: 栈顺序栈链表栈 利用栈实现递归(递推求组合数)在上一章中我们讨论了线性表数据结构,重点探讨了线性表的几种实现方法。可以发现对线性表的操作,没有特别的限制:可以在表中任意当前位置插入或删除元素,而且可以重置当前节点指向。这一章我们将详细介绍一种操作受限的线性表——栈。栈是一种只支持两种主要的操作的受限线性表。可以将栈想像成一个“黑盒”,我们只能看到黑盒中置于顶端的物体。对栈里元素的操作也只能针对顶端的元素进行。习惯上称栈的可访问元素即栈的顶端,为栈顶。对栈的两种操作称为压栈(push,在栈顶添加新的元素)和出栈(pop,弹出栈顶元素)。这种受限的操作下,元素通常遵循后出先入(LIFO,LastI 阅读全文
posted @ 2012-07-13 22:52 wlu 阅读(794) 评论(0) 推荐(0) 编辑
摘要: 顺序线性表单练式线性表双链式顺序表循环链表及其应用 线性表(LinearList)是一种最常见也很重要的数据结构。类似于代数学中的向量的概念,线性表是由一组有序的数据组成。一般采用的描述方式为:(a0,a2,…,an-1)其中n表示线性表的有效长度,其中元素序号为0—n-1。这里所说的“有效长度”指的是线性表中实际使用的元素的个数,相对于线性表的最大允许长度。ai是元素的抽象表示,可以是表示不同的含义的变量。若线性表中没有任何元素,及有效长度为0时,我们称之为空表,记为()。线性中的第一个元素称之为表头,通常还将线性表的最后一个元素成为表尾。在对线性表进行元素访问时使用其下标作为索引。例如,访 阅读全文
posted @ 2012-07-13 21:03 wlu 阅读(676) 评论(0) 推荐(0) 编辑
摘要: 开场白:很长时间以来一直想把以前所学习的一些基本算法整理一遍,最近准备利用周末的时间在博客园写一个算法系列,留作记录以备将来查看。首先从“元素项类” 谈起。所有源代码在google code上http://code.google.com/p/algolib-java/下载或者直接猛击:/Files/luweiseu/Source_codes.rar 在线性表以及其它的数据结构中,每个元素都包含数据区,即我们这里讲的“元素项”(ElementItem)。元素项的元素值可以是数值类型,如整数、浮点数等;也可以是字符型,如String,char。一般情况下,元素项的类型在同一个线性表中是相同的,但是 阅读全文
posted @ 2012-07-13 19:11 wlu 阅读(524) 评论(1) 推荐(0) 编辑
摘要: HBase orm以及一个简历存储用例 阅读全文
posted @ 2012-07-13 14:30 wlu 阅读(1758) 评论(0) 推荐(0) 编辑
摘要: 早晨看着head fist design pattern,看到decorator pattern 时越发觉得这个“数据结构”特别眼熟。想了想,就是链表。感觉decorator pattern 跟链表基本是一回事,只不过从高一层的设计角度来看这是一种模式而已。网上有相关的文章,有空看一下:http://perldesignpatterns.com/?DecoratorPattern 阅读全文
posted @ 2012-07-12 10:57 wlu 阅读(183) 评论(0) 推荐(0) 编辑