数据结构
文章平均质量分 92
卷毛迷你猪
不说啦都是泪
展开
-
小肥柴慢慢手写数据结构(C篇)(5-5 Huffuman编码)
(1)Huffman编码的应用非常广泛。(2)Huffman编码是一种变长的编码,可配合类似树状的数据结构存储编码表。(3)对于森林这个概念,我们没有介绍,直接在实践中学习。【吐槽】C的传值解决方法不太优雅。原创 2024-04-09 13:57:02 · 1072 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(5-4 中场小结)
主线任务先告一段落,对初学者我个人建议先绕后面的章节学习散列、堆、并查集和图论初步,因为从这儿开始之后的数据结构的复杂度(包括具体实现和数学推导)和学习难度陡增,需要投入更多的精力反复琢磨;但正式这些复杂的工具却往往是实际工程应用中最实用的基础部件,且在面试中属于面试官摸底的必选题库,属于典型的手搓费劲、用起来真香。兜兜转转,咱们的讨论还是回到了第一次讨论数据结构的一个点,即:“数据的存储与组织”,算是扣题了。(1)它不仅能通过计算key值实现数据快速的查、取和尽可能的均匀、分散的存储。原创 2024-02-18 15:38:17 · 888 阅读 · 1 评论 -
小肥柴慢慢手写数据结构(C篇)(5-3 树的遍历)
小肥柴慢慢学习数据结构笔记(C篇)(5-3 树的遍历)目录5-10 BST/AVL的前序、中序和后序遍历5-10-1 直观理解有序二叉树的3种遍历5-10-2 更加一般的规律5-11 再看二叉树的前/中/后序遍历5-11-1 经典问题热身5-11-2 二叉树递归框架5-11-3 再看3种遍历5-11-4 尝试解决复杂问题5-11-5 深度优先搜索(DFS)与二叉树遍历浅谈5-12 层序遍历5-12-1 层序遍历的原理5-12-2 层序遍历队列实现5-12-3 层序遍历数组实现5-12-4 层序遍历与广度优先原创 2024-01-19 18:45:19 · 1394 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(5-2 AVL树)
小肥柴慢慢学习数据结构笔记(C篇)(5-2 AVL树目录5-5 AVL出现的原因5-5-1 平衡树5-5-2 平衡二叉树的具体案例5-6 AVL平衡策略的讨论5-7 不使用平衡因子的实现(黑皮书,训练思维)5-8 使用平衡因子的实现(更加常见的实现方法)5-9 一些数学讨论参考文献目录5-5 AVL出现的原因5-5-1 平衡树(1)设想如下场景:使用之前实现的BST,从空树开始向其中插入如下序列n1,n2,...nkn_1,n_2, ... n_kn1,n2,...nk,且ni−1<ni原创 2023-12-26 23:49:06 · 1422 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(5-1-2 BST的相关操作讨论)
(1)为了方便编码实现上述4个问题的解决方案,且考虑到黑皮书中有关key的描述,我们决定将BST的节点struct升级,引入键key,值value(简记为val)的概念,并在节点中存储以当前节点为根的子树的所有节点数(N)i.按照常理,最小key节点肯定左枝(left),但如果当前节点T没有左枝,因为右枝(right)所有节点key值均大于当前节点,那当前节点T就是需要删除的最小key节点,删除之后直接返回右枝即可。如果要实现这个操作,必然需要知晓当前节点为根的子树的总节点数。(姑且称之为range操作)原创 2023-12-25 20:42:44 · 1301 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(5-1 二叉搜索树)
在前面的学习中,我们讨论的数据结构一般操作的时间复杂度在O(n)级别;于是人们开始思考:是否能够设计一种不同于已有的数据结构(线性表)去实现更高效的操作呢? 答案自然是树了。原创 2023-12-06 10:00:53 · 1201 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(0-2 经典问题)
小肥柴慢慢手写数据结构(0-2 经典问题)目录0-5 讨论问题的初衷0-6 问题(1)最大公约数问题(GCD,欧几里得算法)0-7 问题(2)数值的整数次方(幂运算)0-8 问题(3)斐波那契数列0-9 问题(4)最大子序列和(重要的切入点)0-10 小结目录0-5 讨论问题的初衷(1)讨论问题的范围:(黑皮书第1、2章)查询、递归、动态规划案例。(2)讨论问题的目的:通过经典问题帮助大家找回编程感觉。(3)大致感受一下课程学习的真实难度,对黑皮书中的案例做出补充和优化。【注】相关复杂度分析结果原创 2023-11-29 12:28:08 · 1071 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(0-1 基础知识)
个人十分认可《计算机程序设计艺术(第1卷)》中的描述,因为它直接点明了what-why-how中的前两项,特别是“为什么咱们计算机大类专业的同学(或者807/808)必须要学习《数据结构》和《算法》这两个项目的相关课程”这个核心问题的源头。(4)不要太过于纠结算法理论部分的研究,等有闲暇时光了,慢慢的找对应的辅助教程一点一点的磨《算法导论》和网上的算法OJ题;(2)在完成(1)的基础上,踏踏实实的沿用参考教材(黑皮书),尽量依靠自己完成对应(1)的编码实现;最后再给出挑选过的有意义的学习链接。原创 2023-11-27 15:44:01 · 748 阅读 · 0 评论 -
小肥柴慢慢学习数据结构笔记(Java篇)(3-1 栈Stack(Array实现))
还是老博主(HelloWorld_EE),但Stack的实现比较简单,从1.0开始借助Vector实现的。(4)上代码:ArrayStack.java。(2)上代码:Array.java。(3)上代码:Stack.java。注:代码参考刘大佬的github。(1)明确需要实现的类。原创 2023-11-23 20:07:03 · 80 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(4-2 队列应用)
(2)但看来看去,觉得2021年我抛出的一些思路还是正确的,并在此丰富以下表达出来:数据结构的学习,核心是设计思想的学习,训练包括设计思想的编码落地和解决实际问题算法变现,绝对不能硬上。(3)编码上JDK的实现思路很清晰,没有刻意强调list为“空数据”链表的特例,当然也做了合适的处理,例如下面 if(oldFirst == NULL)处的注释:操作时总是围绕newNode展开,这是一个不易出错的编写方法。(2)手动挡数组实现双端队列(单调队列) ==> 这个重点讨论,毕竟咱们的实现太臭了。原创 2023-11-23 18:34:33 · 234 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(3-1 Stack栈简介)
小肥柴慢慢手写数据结构(C篇)(3-1 Stack栈)目录3-1 栈的概念3-2 栈的动态数组实现3-3 栈的链表实现3-4 时间复杂度3-5 实际项目案例目录3-1 栈的概念3-2 栈的动态数组实现使用之前实现的动态数组,要点如下:(1)仅在数组尾部进行push和pop操作;(2)动态数组的标记topIndex标记top元素;(3)pop操作并没有将元素真正剔除出数组,只是使用topIndex屏蔽了后续元素;(4)push操作时,若现有数组满员,扩容;(5)pop操作时现有数组使用元素低原创 2021-01-22 15:16:46 · 668 阅读 · 1 评论 -
小肥柴慢慢手写数据结构(C篇)(2-7 多项式)
小肥柴慢慢手写数据结构(C篇)(2-7 多项式)目录2-26 多项式数据结构分析2-27 解决问题的自强方案2-27-1 设计思路2-27-2 具体代码实现2-27-3 简单的讨论2-28 严版教材解决方案2-29 浙大版数据结构课程解决方案目录2-26 多项式数据结构分析多项式形式p(n)=anxn+an−1xn−1+...+a2x2+a1x+a0{p(n)}={a_n}x^{n}+{a_n-1}x^{n-1}+...+{a_2}x^{2}+{a_1}x+{a_0}p(n)=anxn+an−原创 2020-12-24 22:54:05 · 429 阅读 · 1 评论 -
小肥柴慢慢手写数据结构(C篇)(2-6 双链表 DoubleLinkedList)
小肥柴慢慢手写数据结构(C篇)(2-6 双链表 DoubleLinkedList)目录2-20 双链表的概念2-20-1 为什么需要双链表2-20-2 双链表样式2-21 朴素的ADT2-22 严版教材的相关讨论2-23 黑皮书的相关讨论2-24 Linux链表源码解析目录2-20 双链表的概念2-20-1 为什么需要双链表还是那句话:任何数据结构都有自己诞生的特定场合,是对某种指定功能的特型优化!脱离应用场景单独讨论某个数据结构是不合适的。那么为什么会产生链表呢?(1)某些场景下我们希望获得一原创 2020-12-08 15:23:25 · 490 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(2-5 SkipList 跳表)
小肥柴慢慢手写数据结构(C篇)(2-5 跳表)目录2-14 跳表(skip list)的概念2-15 参考论文的实现2-15-1 初始化2-15-2 插入节点2-15-3 查询(这个才是我们想要的核心功能)2-15-4 打印2-15-5 删除节点2-15-6 清空2-15-7 完整代码2-16 复杂度分析2-16-1 时间复杂度2-16-2 空间复杂度2-17 跳表的另一种实现2-18 重要的应用----Redis2-18 小结目录我在网上传播的答案中,找了一个相对简单的实现,方便手写。2-14 跳表原创 2020-12-02 16:22:38 · 588 阅读 · 0 评论 -
小肥柴慢慢学习数据结构笔记(Java篇)(2-1 单链表LinkedList)
小肥柴慢慢学习数据结构笔记(Java篇)(2-1 单链表LinkedList)目录2-1 上代码2-2 代码细节2-3 源码阅读2-4 总结目录在 小肥柴慢慢手写数据结构(C篇)(2-1 单链表 SingleLinkedList self版实现(1))中我们实现了C版的单链表,后又学习了反转、快慢指针等知识点,还对比了严版教材的实现,现在用Java再写一遍,练习OOP。注:代码参考刘大佬的github2-1 上代码MyLinkedList.javapublic class MyLinkedL原创 2020-11-17 13:07:48 · 243 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(2-4 单链表 严版教材实现浅析)
小肥柴慢慢手写数据结构(C篇)(2-4 单链表 严版教材实现浅析)目录2-11 单链表完整代码2-11-1 头文件c2-5.h2-11-2 具体实现bo2-6.cpp2-11-3 测试和调用main2-6.cpp2-12 循环单链表完整代码2-12-1 头文件c2-2.h2-12-2 具体实现bo2-4.cpp2-13 静态链表2-13 小结目录我在网上传播的答案中,找了一个相对简单的实现,方便手写。2-11 单链表完整代码2-11-1 头文件c2-5.h这是严版教材中较为实用的一个实现方案,抱佛原创 2020-11-15 12:01:31 · 300 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇) (2-3 单链表 SingleLinkedList self版实现(3)--循环链表与快慢指针)
小肥柴慢慢手写数据结构(C篇)(2-3 单链表 SingleLinkedList self版实现3--循环链表与快慢指针目录2-10 循环链表2-10-1 循环链表的关键2-10-2 具体代码实现2-11 快慢指针2-11-1 快慢指针的概念2-11-2 常用解题场景目录2-10 循环链表2-10-1 循环链表的关键2-10-2 具体代码实现2-11 快慢指针2-11-1 快慢指针的概念2-11-2 常用解题场景参考:[1] 单链表反转详解(4种算法实现)...原创 2020-11-15 00:26:23 · 378 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(2-2 单链表 SingleLinkedList self版实现(2)--链表反转与head/tail讨论)
小肥柴慢慢手写数据结构(C篇)(2-2 单链表 SingleLinkedList self版实现--链表反转与head/tail讨论)目录2-5 啥是链表反转?2-6 常见的反转四种方法2-7 head与tail的讨论2-8 总结与反思目录2-5 啥是链表反转?如图所示,就是把原来的链表逆序重新组装起来。建议学习时请遵循:“先画图,弄清步骤再写代码”的原则,一定不能死背代码,要靠自己把反转逻辑推导出来。2-6 常见的反转四种方法迭代反转画图,考虑仅完成部分节点反转的状态:设当前需要反转的原创 2020-11-08 20:50:37 · 1141 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(2-1 单链表 SingleLinkedList self版实现(1))
小肥柴慢慢手写数据结构(C篇)(2-1 单链表 SingleLinkedList self版实现)目录2-1 为啥要有链表2-2 出列ADT2-3 边想边写2-4 反思一下目录2-1 为啥要有链表在1篇中“动态”数组ArrayList的学习中,我们发现这个动态是依靠resize操作实现的,非真正意义上的动态,因为我们需要随时关注size和capacity之间的关系。虽然ArrayList的查询效率非常高,但是插入和删除开销大。针对以上弱点,给出一个新的数据结构–链表。2-2 出列ADT节原创 2020-10-30 13:41:15 · 675 阅读 · 2 评论 -
小肥柴慢慢学习数据结构笔记(Java篇)(1-1 动态数组ArrayList)
小肥柴慢慢学习数据结构笔记(Java篇)(1-1 动态数组ArrayList)目录1-1 上代码1-2 代码细节重点1-3 源码阅读1-4 总结目录在链接 小肥柴慢慢手写数据结构(C篇)(1-3 线性表 ArrayList 严版教材实现浅析).中,给出了大佬的git仓,现在就跟着大佬的脚步用java再写一遍(Java和C++都是面向对象的,写起来顺畅很多)1-1 上代码MyArrayList.javapublic class MyArrayList<E> { private st原创 2020-10-29 14:16:05 · 308 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(1-3 线性表 ArrayList 严版教材实现浅析)
小肥柴慢慢手写数据结构(C篇)(1-4 线性表 ArrayList 严版教材实现浅析)目录1-9 对比代码,理顺学习思路和基本语法1-10 回归数学原理,看书推公式1-11 翻一翻Linux源码目录准备工作复习指针:(1)C语言重点——指针篇(一篇让你完全搞懂指针)https://zhuanlan.zhihu.com/p/101934152?utm_source=wechat_session其中有一段评论我觉得是学习的真谛,直接debug看地址,看数据:(2)从5个维度来看C语言指针(指原创 2020-10-27 16:38:32 · 473 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(1-2 线性表 ArrayList 升级版本)
小肥柴慢慢手写数据结构(C篇)(1-2 线性表 ArrayList 升级版本)目录1-5 要改进哪些点?1-6 开始施工1-7 完整代码和测试1-8 接下来做什么目录1-5 要改进哪些点?我们将在前一篇代码的基础上做修改,老样子先列个单子预测下工作内容及可能出现的麻烦。存储数据的data数组大小应该是动态生成的。如果当前存储单元使用达到上限(capacity),那么自动扩容。在create和add操作中会有一些改动,可能需要解bug。1-6 开始施工对照单子,一步步来:使用指针保存d原创 2020-10-25 15:06:15 · 597 阅读 · 2 评论 -
小肥柴慢慢手写数据结构(C篇)(1-1 线性表 ArrayList 原始版本)
小肥柴慢慢手写数据结构(C篇)(1-1 线性表 ArrayList 原始版本)目录1-1 为啥要有线性表1-2 自己出列一个单子(ADT),看看要做什么1-3 边想边写1-4 反思一下目录1-1 为啥要有线性表许多低年级计算机类专业的朋友受限于各类原因,编程基础不扎实,学《数据结构》/算法课,直接上清华严版的数据结构很容易复现从入门到翻车最后放弃的流程。自己翻看一些经典教材和资料后,觉得还是从零开始对照原理手动编出代码后,再返回去看严版数据结构这本工具书,适度刷刷算法题 (比如Leecode),或许对原创 2020-10-23 20:42:50 · 921 阅读 · 0 评论 -
小肥柴慢慢手写数据结构(C篇)(0-开篇的话)
许多低年级计算机类专业的朋友受限于各类原因,编程基础不扎实,学《数据结构》/算法课,直接上清华严版的数据结构很容易复现从入门到翻车最后放弃的流程。自己翻看一些经典教材和资料后,觉得还是从零开始对照原理手动编出代码后,再返回去看严版数据结构这本工具书,适度刷刷算法题 (比如Leecode),或许对大家学习DS这门课能有帮助和提升。原创 2020-10-23 08:49:16 · 1408 阅读 · 2 评论