![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 81
Re_cover
这个作者很懒,什么都没留下…
展开
-
图解数据结构(3)——队
转载自http://www.cppblog.com/guogangj/archive/2009/10/14/98588.html前一篇讲了栈(Stack),队和栈其实只有一个差别,栈是先进后出,队是先进先出,如图:从图中可以看出,队有两个常用的方法,Enqueue和Dequeue,顾名思义,就是进队和出队了。队和栈一样,既可以用数组实现,也可以用链表实现,我还是偏向于用转载 2013-07-17 19:24:47 · 741 阅读 · 0 评论 -
Wiki OI 1245 最小的N个和
题目链接:http://wikioi.com/problem/1245/算法与思路:K路归并 + 堆(优先队列),K路归并具体请参考刘汝佳《算法竞赛入门经典训练指南》P189;题目要求从两个长度为n的数列中各取出一数相加,可得到n*n个和,输出这些和升序的前n项;由于数据太大,不能通过先求和再排序的方式来求解,这个时候就要用到堆了;首先将a,b两数组排序,然后将a[i] + b[1原创 2013-07-25 21:46:20 · 1742 阅读 · 0 评论 -
Wiki OI 1063 合并果子
题目链接:http://wikioi.com/problem/1063/算法与思路:二叉堆的应用,所谓二叉堆就是指任意父节点都不大于或不小于其子节点的完全二叉树,这题使用的是小顶堆(根节点是所有节点中的最小值)。欲求最小消耗,则需要每次取最小的两堆果子合并,并将合并后的元素加入集合中,按照这种规则合并直到只剩一堆。很朴素的想法就是将元素排序,取出合并后插入有序队列中,重复取直到结束原创 2013-07-17 22:11:04 · 1224 阅读 · 0 评论 -
Wiki OI 1082 线段树练习 3 (区间更新,区间求和)
题目链接:http://wikioi.com/problem/1082/算法与思路:线段树对于线段树的初学者,可以参考以下链接,里面有相关的习题和详解http://www.notonlysuccess.com/index.php/segment-tree-complete/题目意思很直白,区间更新区间求和,思路倒没什么多讲的,关键在理解代码。值得注意的一个地方是,与单点更新原创 2013-07-19 10:51:18 · 1518 阅读 · 0 评论 -
Wiki OI 1282 约瑟夫问题
题目链接:http://wikioi.com/problem/1282/算法与思路:线段树;这个题目如果使用链表模拟出圈,时间复杂度为O(m*n);题目的数据规模是3W,显然会超时(当然如果数据水就不好说了);使用线段树的话却可以达到O(nlogn);首先递归建树,模版就不解释了;然后求相对位置seq,表示出圈者是当前圈中剩余者的第seq位;然后根据相对位置寻找seq的实际编号原创 2013-07-27 10:23:44 · 1464 阅读 · 0 评论 -
图解数据结构(4)——二分法查找法
转载自http://www.cppblog.com/guogangj/archive/2009/10/15/98649.html如何从数组里找一个元素的位置?如果排列是无序的,我们只能从头到尾找,但如果排列是有序的,我们则可以用别的更好的方法,二分查找法就类似我们在英汉词典里找一个单词的方法。如下图所示(假如我们要查找的数字是“88”):下面我给出了一段demo代码,来演示转载 2013-07-17 19:27:57 · 838 阅读 · 0 评论 -
图解数据结构(6)——树及树的遍历
转载自http://www.cppblog.com/guogangj/archive/2009/10/16/98772.html树,顾名思义,长得像一棵树,不过通常我们画成一棵倒过来的树,根在上,叶在下。不说那么多了,图一看就懂:当然了,引入了树之后,就不得不引入树的一些概念,这些概念我照样尽量用图,谁会记那么多文字?树这种结构还可以表示成下面这种方式,可见树用转载 2013-07-17 21:13:07 · 807 阅读 · 1 评论 -
图解数据结构(1)——大圈表示法、动态数组和单向链表
转载自http://www.cppblog.com/guogangj/archive/2009/10/13/98476.html《数据结构》这门课是计算机专业的核心课程,但往往却让人头痛,因为比较抽象,当然了,也许你足够聪明,并不觉得它有多难,但对我而言,是有点难度,后来我仔细想了想,到底哪里难?我得出这么个结论:长篇大论,缺乏图表。现在的人都喜欢看电影,看电视剧,很少人还热衷于看小说吧,转载 2013-07-17 19:09:38 · 862 阅读 · 0 评论 -
图解数据结构(2)——栈
转载自http://www.cppblog.com/guogangj/archive/2009/10/14/98565.html前一篇讲解了最基本的东西,这篇就稍微前进一点点,讲一下栈,栈在英文中叫Stack,翻译成中文又叫“堆栈”,但决不能称为“堆”,这个要搞清楚,我们说的“栈”和“堆栈”指的都是Stack这种数据结构,但“堆”却是另外一个概念了,这里且不提。栈最大特点是先进后出转载 2013-07-17 19:20:12 · 711 阅读 · 0 评论 -
图解数据结构(5)——散列法及哈希表
转载自http://www.cppblog.com/guogangj/archive/2009/10/15/98699.html数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——转载 2013-07-17 21:09:25 · 1079 阅读 · 0 评论 -
图解数据结构(8)——二叉堆
转载自http://www.cppblog.com/guogangj/archive/2009/10/29/99729.html首先说说数据结构概念——堆(Heap),其实也没什么大不了,简单地说就是一种有序队列而已,普通的队列是先入先出,而二叉堆是:最小先出。这不是很简单么?如果这个队列是用数组实现的话那用打擂台的方式从头到尾找一遍,把最小的拿出来不就行了?行啊,可是出队的操作是转载 2013-07-17 21:41:58 · 946 阅读 · 0 评论 -
Wiki OI 1001 舒适的路线
题目链接:http://wikioi.com/problem/1001/算法与思路:并查集,首先枚举速度最大的那条边,然后把速度大于这条边的边都删掉,接下来的任务就是在残图中寻找一条路,路上的最小的那条边要尽量大。这个地方用并查集实现,对于剩下的边由大到小排序,然后逐个往集合里面加,直到某次加入操作后起点和终点被加到了同一个集合,这时停止操作,最后加的那条边就是一条所求的最原创 2013-07-17 22:21:57 · 2430 阅读 · 1 评论