随笔分类 - 【数据结构与算法】
摘要:具体思想可以参考这篇文章,很详细。(https://blog.csdn.net/hrn1216/article/details/51534607)
阅读全文
摘要:动态规划 动态规划算法与分治法类似,基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是适合用动态规划的问题,经分解的子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,以至于最后解决问题需要耗费指数时间。然而,不同
阅读全文
摘要:1、递归的概念 直接或间接的调用自身的算法成为递归算法。用函数自身给出定义的函数称为递归函数。 例1:阶乘函数 例2:Fibonacci数列 例3 全排列问题 2、分治法的基本思想 分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题。这些子问题相互独立且与原问题相同,递归的解决这些子问
阅读全文
摘要:希尔排序其实是改进版的插入排序,但是它是不稳定的。它的做法是使用一个增量使元素每次相隔增量的元素都被排序。增量最后一次的值为1。也就是对所有的元素进行一次插入排序。增量的选择当然是比较困难的。所幸有经验知识可以参考。 为了让排序算法有更好的鲁棒性,我们将所有排序算法的参数都设置为一个带排序的数组以及
阅读全文
摘要:首先推荐这篇文章https://blog.csdn.net/qq_19782019/article/details/78021705,很明白的写出了两种排序算法的差距,更对两种不同插入排序的性能进行了分析。插入排序的思想是,一共N个数据,需要进行N-1趟排序组成。对从1到N-1趟,插入排序保证从位置
阅读全文
摘要:实现优先队列可以有好几种方法,但是最经常使用的是二叉堆,甚至于堆这个词一般都是指优先队列这种数据结构。堆应该有两种性质,结构性和堆序性。 1、 结构性 堆是一颗完全填满的二叉树,有例外的是最底层,底层元素是从左到右填入。一颗高为H的完全二叉树有2^h到2^(h+1)-1个节点。任意一个位置 i 的元
阅读全文
摘要:哈希表的作用是用来实现高效的查找,相比较数组、链表等更加高效。通过关键字和值的一一对应来实现。和C++的关联容器有点像,但是map内部实现是通过红黑树来实现的。相对于而二叉查找树,散列表只支持其中的一部分操作。散列是一种用以常数平均时间执行插入、删除、和查找的技术。 哈希表的实现主要涉及两个方面,一
阅读全文
摘要:1、AVL平衡树 AVL 平衡树是带有平衡条件的二叉查找树。保证树的深度深度是O(logN),定义一个不平衡的节点的定义是,他的左右子树高度差是2. 当插入一个节点之后,树可能不平衡,假设这个不平衡点是K1,造成这种不平衡的原因可能有以下四个情况: (1)对K1的左儿子的左子树进行插入。 (2)对K
阅读全文
摘要:1、四种遍历概念 (1)先序遍历:先访问根节点,再访问左子树,最后访问右子树。 (2) 后序遍历:先左子树,再右子树,最后根节点。 (3)中序遍历:先左子树,再根节点,最后右子树。 (4)层序遍历:每一层从左到右访问每一个节点。 每一个子树遍历时依然按照此时的遍历顺序。 如下图: 先序遍历:FCAD
阅读全文
摘要:1、二叉树 二叉树是一颗树。其中每个节点不能有多于两个的儿子。 二叉树的单节点实现: 2、二叉查找树 二叉树的一个重要应用就是他们在查找中的使用。使二叉树成为二叉查找树的性质使,对于树中的每个节点X,他的左子树的关键字值小于X的关键字,而它的右子树所有关键字值大于X的关键字。基本实现如下 和其他数据
阅读全文
摘要:队列是一种FIFO(先入先出)的数据结构。队列只允许在队首进行删除操作,在队尾进行插入操作,队列在网络任务、消息队列、排队等情况下运用很多。现实生活中很多情况下都是消息队列的体现。比如售票口排队买票、银行等待呼叫队列等。 线性表到这里就基本结束了,其实这几种结构很像,只是每一种有针对于自己的独特的操
阅读全文
摘要:堆栈如同前面的链表一样,也是线性结构。也可以用数组和链表两种方式来实现。堆栈遵循FILO(先入后出),主要操作包括入栈、出栈,等同于链表的插入和删除,不同的是链表可以在任意地方进行插入删除操作而堆栈的入栈和出栈相当于在链表的头节点处进行插入和删除操作。还是直接贴代码。 堆栈主要可以用在一些保存现场的
阅读全文
摘要:之前学习数据结构并没有注意过双链表的问题。现在专门拿出来学习一下。 首先推荐点击打开链接这篇文章。讲得很好,专门以linux内核中的数据结构为例讲述了双向链表在内核中的应用。最主要的还是删除和插入操作,这两个搞明白了基本也差不多了。双链表可以让头尾节点指向对方这样双向链表也就变成了循环链表。相较于单
阅读全文
摘要:用两个月的时间好好把数据结构复习一遍,都算不上复习了,最后的图的方面完全是新学,希望能坚持下去。 一、单链表 链表相比较于数组更为灵活,存储方式是链式的,插入删除操作优于数组,但是查询操作优于数组。还是不多介绍了直接上代码吧。(代码参考数据结构与算法分析-c语言版本) 单链表结束。下来应该是双链表。
阅读全文

浙公网安备 33010602011771号