随笔分类 -  设计模式与数据结构

如何才能见功力?!
图解数据结构(9)——左偏树
摘要:十三、左偏树(Leftist Tree)树这个数据结构内容真的很多,上一节所讲的二叉堆,其实就是一颗二叉树,这次讲的左偏树(又叫“左翼堆”),也是树。二叉堆是个很不错的数据结构,因为它非常便于理解,而且仅仅用了一个数组,不会造成额外空间的浪费,但它有个缺点,那就是很难合并两个二叉堆,对于“合并”,“拆分”这种操作,我觉得最方面... 阅读全文
posted @ 2010-06-28 15:12 chao_yu 阅读(7633) 评论(0) 推荐(1) 编辑
图解数据结构(8)——二叉堆
摘要:十二、二叉堆(Binary Heap)经历了上一篇实现AVL树的繁琐,这篇就显得非常easy了。首先说说数据结构概念——堆(Heap),其实也没什么大不了,简单地说就是一种有序队列而已,普通的队列是先入先出,而二叉堆是:最小先出。这不是很简单么?如果这个队列是用数组实现的话那用打擂台的方式从头到尾找一遍,把最小的拿出来不就行了?行啊,可是出队的操作是很频繁的,而每次都得打一... 阅读全文
posted @ 2010-06-28 15:08 chao_yu 阅读(8124) 评论(1) 推荐(0) 编辑
图解数据结构(7)——二叉查找树及平衡二叉查找树
摘要:这篇将是最有难度和挑战性的一篇,做好心理准备!十、二叉查找树(BST)前一篇介绍了树,却未介绍树有什么用。但就算我不说,你也能想得到,看我们Windows的目录结构,其实就是树形的,一个典型的分类应用。当然除了分类,树还有别的作用,我们可以利用树建立一个非常便于查找取值又非常便于插入删除的数据结构,这就是马上要提到的二叉查找树(Binary Search Tree),这种二叉树有个特点:对任意节点... 阅读全文
posted @ 2010-06-27 17:07 chao_yu 阅读(8278) 评论(2) 推荐(3) 编辑
图解数据结构(6)——树及树的遍历
摘要:八、树(Tree)树,顾名思义,长得像一棵树,不过通常我们画成一棵倒过来的树,根在上,叶在下。不说那么多了,图一看就懂:当然了,引入了树之后,就不得不引入树的一些概念,这些概念我照样尽量用图,谁会记那么多文字?树这种结构还可以表示成下面这种方式,可见树用来描述包含关系是很不错的,但这种包含关系不得出现交叉重叠区域,否则就不能用树描述了,看图:面试的时候我们经常被考到的是一种叫“二叉树&... 阅读全文
posted @ 2010-06-27 16:55 chao_yu 阅读(47227) 评论(0) 推荐(7) 编辑
图解数据结构(5)——散列法及哈希表
摘要:七、哈希表(Hash Table)及散列法(Hashing)数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——拉链法,我们可以理解为“链表的数组&rdqu... 阅读全文
posted @ 2010-06-27 16:50 chao_yu 阅读(4791) 评论(1) 推荐(3) 编辑
图解数据结构(4)——二分法查找法
摘要:六、二分法查找(Binary Search)如何从数组里找一个元素的位置?如果排列是无序的,我们只能从头到尾找,但如果排列是有序的,我们则可以用别的更好的方法,二分查找法就类似我们在英汉词典里找一个单词的方法。如下图所示(假如我们要查找的数字是“88”):下面我给出了一段demo代码,来演示二分查找法比顺序查找快多少,代码为了方便起见,初始化有序表的时候填入的数字都是均匀的... 阅读全文
posted @ 2010-06-27 16:48 chao_yu 阅读(4122) 评论(0) 推荐(1) 编辑
图解数据结构(3)——队
摘要:五、队(Queue)前一篇讲了栈(Stack),队和栈其实只有一个差别,栈是先进后出,队是先进先出,如图:从图中可以看出,队有两个常用的方法,Enqueue和Dequeue,顾名思义,就是进队和出队了。队和栈一样,既可以用数组实现,也可以用链表实现,我还是偏向于用数组,我的实现示意图如下:队有啥用呢?一个最常用的用途就是“buffer”,即缓冲区,比如有一批从网络来的数据,... 阅读全文
posted @ 2010-06-27 16:45 chao_yu 阅读(2283) 评论(1) 推荐(1) 编辑
图解数据结构(2)——栈
摘要:四、栈(Stack) 前一篇讲解了最基本的东西,这篇就稍微前进一点点,讲一下栈,栈在英文中叫Stack,翻译成中文又叫“堆栈”,但决不能称为“堆”,这个要搞清楚,我们说的“栈”和“堆栈”指的都是Stack这种数据结构,但“堆”却是另外一个概念了,这里且不提。 栈最大特点是先进... 阅读全文
posted @ 2010-06-27 16:37 chao_yu 阅读(4195) 评论(0) 推荐(2) 编辑
优先级队列(二叉堆)
摘要:堆排序在最坏的情况下,其时间复杂度也能达到O(nlogn)。相对于快速排序来说,这是它最大的优点,此外,堆排序仅需要一个记录大小供交换用的辅助存储空间。堆排序的数据结构是二叉堆,二叉堆的特点有两个,一个是它是一棵完全二叉树,另一个是它的根结点小于孩子结点,所以我们很容易找到它的最小结点----根结点;当然如果你想找到最大结点的话,那就要扫描所有的叶子结点,这是很费时间的,如果你想找的是最大结点的话... 阅读全文
posted @ 2010-06-17 16:59 chao_yu 阅读(1856) 评论(0) 推荐(1) 编辑
图解数据结构(1)——大圈表示法、动态数组和单向链表
摘要:转自http://www.cppblog.com/guogangj/archive/2009/10/13/98476.html《数据结构》这门课是计算机专业的核心课程,但往往却让人头痛,因为比较抽象,当然了,也许你足够聪明,并不觉得它有多难,但对我而言,是有点难度,后来我仔细想了想,到底哪里难?我得出这么个结论:长篇大论,缺乏图表。现在的人都喜欢看电影,看电视剧,很少人还热衷于看小说吧,密密麻麻的... 阅读全文
posted @ 2010-06-17 11:58 chao_yu 阅读(3749) 评论(2) 推荐(4) 编辑
javascript运用Prototype模式
摘要:javascript开发人员对prototype这个东西恐怕都十分熟悉了,可是对于prototype模式了解的人恐怕不是很多。原型模式的用意是:通过给出一个原型对象来指明所要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象。和其他创建型模式不同:prototype模式创建对象不是通过new一个类,而是通过一个现有的对象实例来的。有经验的编程人员应该都接触过对象的clone方法,这... 阅读全文
posted @ 2010-06-08 09:41 chao_yu 阅读(864) 评论(0) 推荐(0) 编辑
设计模式的解析和实现(C++)之-Prototype模式
摘要:作用:  用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。  UML结构图:  抽象基类:  1)Prototype:虚拟基类,所有原型的基类,提供Clone接口函数  接口函数:  1)Prototype::Clone函数:纯虚函数,根据不同的派生类来实例化创建对象.  解析:  Prototype模式其实就是常说的"虚拟构造函数"一个实现,C++的实现机制中并没有支持这个特性,... 阅读全文
posted @ 2010-06-08 09:16 chao_yu 阅读(870) 评论(0) 推荐(0) 编辑