数据结构
ytlcainiao
这个作者很懒,什么都没留下…
展开
-
分而治之策略
分而治之的概念 分而治之是一种使用递归解决问题的算法,主要的技巧是将一个大的复杂的问题划分为多个子问题,而这些子问题可以作为终止条件,或者在一个递归步骤中得到解决,所有子问题的解决结合起来就构成了对原问题的解决 2. 分而治之的优点和缺点 分而治之算法通常包括一个或者多个递归方法的调用,当这些调用将数据分隔成为独立的集合从转载 2015-04-12 17:01:23 · 2617 阅读 · 0 评论 -
图解数据结构(5)——散列法及哈希表
转载自http://www.cppblog.com/guogangj/archive/2009/10/15/98699.html 数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法转载 2015-05-22 11:36:40 · 522 阅读 · 0 评论 -
图解数据结构(8)——二叉堆
转载自http://www.cppblog.com/guogangj/archive/2009/10/29/99729.html 首先说说数据结构概念——堆(Heap),其实也没什么大不了,简单地说就是一种有序队列而已,普通的队列是先入先出,而二叉堆是:最小先出。 这不是很简单么?如果这个队列是用数组实现的话那用打擂台的方式从头到尾找一遍,把最小的拿出来不就行了?行啊,可是出队的操作是转载 2015-05-22 11:37:14 · 575 阅读 · 0 评论 -
图解数据结构(6)——树及树的遍历
转载自http://www.cppblog.com/guogangj/archive/2009/10/16/98772.html 树,顾名思义,长得像一棵树,不过通常我们画成一棵倒过来的树,根在上,叶在下。不说那么多了,图一看就懂: 当然了,引入了树之后,就不得不引入树的一些概念,这些概念我照样尽量用图,谁会记那么多文字? 树这种结构还可以表示成下面这种方式,可见转载 2015-05-22 11:36:39 · 509 阅读 · 0 评论 -
图解数据结构(1)——大圈表示法、动态数组和单向链表
转载自http://www.cppblog.com/guogangj/archive/2009/10/13/98476.html 《数据结构》这门课是计算机专业的核心课程,但往往却让人头痛,因为比较抽象,当然了,也许你足够聪明,并不觉得它有多难,但对我而言,是有点难度,后来我仔细想了想,到底哪里难?我得出这么个结论:长篇大论,缺乏图表。现在的人都喜欢看电影,看电视剧,很少人还热衷于看小说吧,转载 2015-05-22 11:32:05 · 803 阅读 · 0 评论 -
图解数据结构(3)——队
转载自http://www.cppblog.com/guogangj/archive/2009/10/14/98588.html 前一篇讲了栈(Stack),队和栈其实只有一个差别,栈是先进后出,队是先进先出,如图: 从图中可以看出,队有两个常用的方法,Enqueue和Dequeue,顾名思义,就是进队和出队了。队和栈一样,既可以用数组实现,也可以用链表实现转载 2015-05-22 11:33:58 · 497 阅读 · 0 评论 -
图解数据结构(2)——栈
转载自http://www.cppblog.com/guogangj/archive/2009/10/14/98565.html 前一篇讲解了最基本的东西,这篇就稍微前进一点点,讲一下栈,栈在英文中叫Stack,翻译成中文又叫“堆栈”,但决不能称为“堆”,这个要搞清楚,我们说的“栈”和“堆栈”指的都是Stack这种数据结构,但“堆”却是另外一个概念了,这里且不提。 栈最大特点是先进后出转载 2015-05-22 11:32:45 · 544 阅读 · 0 评论 -
图解数据结构(4)——二分法查找法
转载自http://www.cppblog.com/guogangj/archive/2009/10/15/98649.html 如何从数组里找一个元素的位置?如果排列是无序的,我们只能从头到尾找,但如果排列是有序的,我们则可以用别的更好的方法,二分查找法就类似我们在英汉词典里找一个单词的方法。如下图所示(假如我们要查找的数字是“88”): 下面我给出了一段demo代码,来演示转载 2015-05-22 11:36:12 · 655 阅读 · 0 评论 -
快速排序
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。 一趟快速排序的算法是: 1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;转载 2015-04-12 17:07:18 · 424 阅读 · 0 评论 -
归并排序
归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为: 1)划分子表 2)合并半子表 首先我们来讨论归并算法,归并算法将一系列数据放到一个向量中,索引范围为[first,last],这个序列由两个排好序的子表构成,以索引终点转载 2015-04-12 16:52:40 · 324 阅读 · 0 评论 -
排序(Sort)
这可能是最有趣的一节。排序的考题,在各大公司的笔试里最喜欢出了,但我看多数考得都很简单,通常懂得冒泡排序就差不多了,确实,我在刚学数据机构时候,觉得冒泡排序真的很“精妙”,我怎么就想不出呢?呵呵,其实冒泡通常是效率最差的排序算法,差多少?请看本文,你一定不会后悔的。 1、冒泡排序(Bubbler Sort) 前面刚说了冒泡排序的坏话,但冒泡排序也有其优点,那就是好理解,稳定,再就是空间转载 2015-05-22 14:07:59 · 527 阅读 · 0 评论