排序:
默认
按更新时间
按访问量

链表总结

链表与栈、队列一样,是一种基本的数据结构,有着不支持随机访问的特点。 以单向链表(也是较为常见的)为例,都应包含一个元素和一个存储下一个节点的指针。struct ListNode { int data; ListNode* next; }下面给出关于链表的一些基本操作。 1.通...

2017-12-04 19:59:18

阅读数:18

评论数:0

动态规划之最长公共子序列问题(LCS)

该问题的描述略。 LCS问题同样具有最优子结构(),子问题也出现重叠,但又有所不同——它可以根据条件来排除子问题。 建立一个二维数组res来存储LCS的长度,即res[i][j]表示长度为i的字符串X与长度为j的字符串Y的最长公共子序列的长度。经过分析可以得出如下公式: res[i][j]=...

2017-07-19 15:43:22

阅读数:70

评论数:0

动态规划之钢条问题

先给出概述:动态规划通常是用来解决最优化问题的。最优化问题指的是该类问题有很多可行解,我们希望找到最优解(最大或最小的解),更具体的来说:要得到规模为n的问题的最优解,那么会用到规模为n-1的相似问题的最优解。 下面我们将通过钢条切割问题来详细描述什么是动态规划,动态规划又是如何操作的。 钢条问题...

2017-07-18 10:56:20

阅读数:104

评论数:0

数据结构之平衡二叉树(红黑树)

接上文。 我们介绍二叉树时,强调了它的优点:在它上面做任何字典操作的时间跟树的高度成正比,那单纯的二叉树并不能保证树的高度最低,于是人们就设计了诸如红黑树之类的平衡二叉树——使得一定节点的情况下树的高度最低。 到这里其实数据怎么保存就已经基本

2017-07-17 21:07:00

阅读数:77

评论数:0

数据结构之二叉搜索树

什么是二叉搜索树呢?它与别的数据结构相比其优势又是什么呢? 一颗二叉搜索树就是以一颗二叉树来组织和存储数据的,如图所示(图a是包含6个节点、高度为2的二叉树,图b是包含相同关键字、高度为4的低效二叉树)。对比博文前面所介绍的链表,二叉树也是可以用结构体来实现,只不过每个节点里面不仅要保存数据本身的...

2017-07-17 08:59:17

阅读数:75

评论数:0

数据结构之链表

为什么要单独把链表放出来呢?因为不同于栈和队列的基于数组实现,链表是通过保存在每个对象(这里我们用结构体)里面的指针来形成顺序结构的,这也就意味着它是不支持随机访问的(随机访问是指在常量的时间内访问任何一个元素)。 但肯定有它的优势:从链表里删除(ListDelete)或插入(ListInsert...

2017-07-14 14:58:22

阅读数:43

评论数:0

基本数据结构——栈、队列和链表

栈(stack)实现的是一种依照先进先出(last—in,first-out,LIFO)原则的结构,也就是说最后放入的元素总是最先被取出。 队列(queue)实现的是一种依照先进先出(first-in,first-out,FIFO)原则的结构,也就是说最先放入的元素总是最先被取出。 至于为什么会存...

2017-07-14 14:55:34

阅读数:96

评论数:0

排序算法之终章总结与提升

至此我们介绍了插入排序、(冒泡排序)、归并排序、堆排序以及快速排序,除此之外还有基数排序,计数排序和桶排序。 其中冒泡排序效率低且没有插入排序有代表性,就不做过多描述。 对于小规模的输入,插入排序是一种非常快的原址排序算法(原址指的是输入数组中仅有常数个元素需要在排序过程中存储到数组之外)。 归并...

2017-07-13 11:32:23

阅读数:89

评论数:0

排序算法之快速排序

我们先概述下快速排序的过程:对数组A[p,r]进行排序,第一步将数组A[p,r]分解为三部分:A[p,q-1],A[q+1,r],A[q]其中A[p,q-1]中元素全部小于等于A[q],A[q+1,r]中元素全部大于A[q],这样A[q]这个元素就已经排好序了; 第二步对A[p,q-1],A[q...

2017-07-13 10:44:54

阅读数:62

评论数:0

排序算法之堆排序

要理解什么是堆排序(heapsort)首先要介绍堆,(二叉)堆是这样的一种可以看成近似完全二叉树的数据结构: 采用最大堆,最大堆要满足的要求是对于任意一个节点i中的元素要大于其左孩子和右孩子节点中的元素。这样根节点中所存储的一定是改组元素中的最大元素。如图所示,图(a)表示该种数据结构,图(b...

2017-07-12 14:47:54

阅读数:51

评论数:0

排序算法之归并排序

要想深刻理解归并排序我们首先介绍一下分治法: 但解决问题时,首先将问题分解成若干个规模较小的与原问题类似的子问题; 然后递归地求解各个子问题;(当问题足够小时,直接求解) 最后我们要合并这些分解而来的子问题(注意这是一个与原问题不同的合并操作); 归并排序完全遵循了分治模式: 首先要想将...

2017-06-04 18:16:02

阅读数:77

评论数:0

排序算法之冒泡排序

冒泡排序是一种流行但低效的排序算法,它的原理是反复交换未按次序排序的元素,可以做下了解不过真的没什么价值。 代码如下: void BubbleSort(int* arr, int len) { for (int i = 0; i < len; i++) { for (int j = l...

2017-06-04 15:21:57

阅读数:61

评论数:0

排序算法之插入排序

排序算法是算法导论一书中首先介绍的内容,由它引出了如何证明算法是正确的(循环不变式),也引出了算法复杂度的计算。 对插入排序而言,它的工作方式就像我们在打牌时排序一手扑克牌一样。我们每次摸到一张牌后都会把这张牌与我们手里的牌进行对比,然后将它放在正确的位置。 我们以这样一组数{31,41,...

2017-06-02 15:53:02

阅读数:95

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭