数据结构与算法
文章平均质量分 90
s10g
如果你觉得我是错的,那么最好证明你是对的
展开
-
数据结构与算法:图
图是一种比较复杂的非线形数据结构树图如果想参考树,点击连接即可虽说树和图都是非线形结构,但是他们也有说区别一般常见的二叉树只有2个结点,并且他们是有父子关系的.“等级制度”比较森严但是图则不同,图都是平级的,没有父子之分,并且1个图结点之间可以有多个图结点相连接常见的图有很多种,例如地铁路线这个图比较复杂,先来看一张简单的图图由2种东西组成顶点[vertex](我喜欢叫图结点)边[edge]无向无环图无向有环图有向有环图有向无环图向指的就是方向环。...原创 2022-07-21 15:42:23 · 715 阅读 · 1 评论 -
数据结构与算法:树 红黑树 (十一)
工具:IDEA本系列介绍的是数据结构: 树这是第 十一 篇目前计划一共有11篇:敬请期待吧~~tips: 上一篇:2-3树,2-3-4树必须看!,因为红黑树就是为了解决2-3树,2-3-4树构建过于复杂产生的!红黑树(Red Bblack Tree), 看到这3字应该很熟悉又很陌生熟悉是因为在很多地方都听到过他的大名,例如HashMap中等等陌生是因为好像并没有了解过他,并不知道他是如何定义,如何运转的…本篇就带大家从0到1,一点点分析,解刨,然后在 “组合” 起来先来回顾一下上一篇的重点:2-3树转红黑树原创 2022-07-13 14:47:29 · 302 阅读 · 0 评论 -
数据结构与算法:树 2-3树,2-3-4树,B树 B+树 B*树 (了解) (十)
工具:IDEA本系列介绍的是数据结构: 树这是第十篇目前计划一共有12篇:敬请期待吧~~2-3树是一个可以有2个子结点或者3个子结点的树.当一棵树当前结点为1个结点,并且 2个子结点又叫2叉树当一棵树当前结点为2个结点 并且 3个子结点又叫3叉树2-3树必须符合是一颗完美AVL树的所有特性!特别注意: 2-3树结点是从叶子结点到根结点通过 拆分 合并 往上长而不是从根结点到叶子结点往下长! (后面会介绍)特性:2结点的特性满足完美AVL树,左子结点 < 当前结点 < 右子结点3结点特性: 左子结点 < 当前原创 2022-07-11 20:30:49 · 293 阅读 · 2 评论 -
数据结构与算法:树 AVL平衡二叉排序树 (九)
工具:IDEA本系列介绍的是数据结构: 树这是第九篇目前计划一共有12篇:敬请期待吧~~高光时刻:添加情况分析:删除情况分析:在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树AVL树特点:一张图搞懂:这里隐藏了三个方法是因为上一篇:二叉排序树(BST)已经说过了,就不重复介绍了,代码很简单,有需要的话翻过去看看吧~添加结点和上一篇讲的也一模一样但是如果真这样写,那不就成了BST树了么,先来分析情况,然后再看代码假设当前树结构是这样的,在没添加12之前,这是一颗AVL树但是一旦添原创 2022-07-08 17:00:01 · 265 阅读 · 0 评论 -
数据结构与算法:树 二叉排序树(BST) (八)
工具:IDEA本系列介绍的是数据结构: 树这是第八篇目前计划一共有12篇:敬请期待吧~~二叉排序树(Binary sort tree) 又叫做 二叉搜索树(binary search tree) ,是树形结构中的一种定义:二叉排序树先来看一张BST树:这是比较理想的情况,可以看出这棵树符合BST的定义这里非常简单,就是一个很普通的结点类思路:添加的代码非常简单:添加完整流程图:如果二叉排序树成功的话,配合中序遍历,正好是有序的!搜索结点分为2种情况:搜索当前结点好理解, 为什么要搜索当前结点的父结点呢?原创 2022-07-07 11:24:45 · 231 阅读 · 0 评论 -
数据结构与算法:树 赫夫曼树(三)(七)
工具:IDEA本系列介绍的是数据结构: 树这是第七篇目前计划一共有12篇:敬请期待吧~~高光时刻前两篇:赫夫曼树(一) 赫夫曼树(二) 都是说如何生成一颗赫夫曼树,那么本篇是赫夫曼树的最后一篇,来说说赫夫曼树给文件的加密与解密!既然涉及到文件加密解密,那么一定会涉及到以下知识点如果不太清晰的同学不用担心,本篇会讲的详详细细,保证你看完醍醐灌顶!既然说到文件的加密解密,那么先想想一般的文件是如何加密解密的通常的流程都是先自定义一串密钥读取需要加密的文件,在读取过程中 将密钥添加到这个文件中,然后生成一个新的加原创 2022-07-06 17:25:43 · 264 阅读 · 0 评论 -
数据结构与算法:树 赫夫曼树(二)(六)
工具:IDEA本系列介绍的是数据结构: 树这是第六篇目前计划一共有12篇:敬请期待吧~~高光时刻随机字符串生成赫夫曼树完整流程:先来回顾一下上一篇,上一篇的重点就是创建一颗赫夫曼树,赫夫曼树是WPL 最小的树上一篇是将数组转变成赫夫曼树流程为:将数组转变成赫夫曼结点集合依次取出集合中前两个数据生成一个新的结点,然后删除掉这两个旧的结点重新排序重复2,3操作,直到集合中只剩下一个结点最终赫夫曼集合中最后的这个结点就是他的根节点完整流程图:解释一下什么叫随机字符串生成赫夫曼树假设当前有一串字符串为 :可以看出,原创 2022-07-06 15:13:15 · 238 阅读 · 0 评论 -
数据结构与算法:树 赫夫曼树(一) (五)
工具:IDEA本系列介绍的是数据结构: 树这是第五篇目前计划一共有12篇:敬请期待吧~~高光时刻构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树/赫夫曼树 (Huffman Tree)。赫夫曼树是带权路径长度最短的树,权值较大的结点离根较近。赫夫曼树**权 **就是通过一个特殊的变量来标识,如果这个变量存在,那么就是带权结点,反之是不带权结点图中绿色的就都是带权结点,红色则是不带权结点路径就是根节点到权的距离例如13的路径长度就是2WPL 是所有权 * 所有路径长度原创 2022-07-04 20:03:08 · 398 阅读 · 0 评论 -
数据结构与算法:树 堆排序(四)
工具:IDEA本系列介绍的是数据结构: 树这是第四篇目前计划一共有12篇:敬请期待吧~~高光时刻前沿:本章应该和放在一起的,可是当时对树的概念有点模糊,所以就没写,一直拖到现在…现在剑已锋利,那就写写喽可以看到,如果是大顶堆,那么当前结点比左子 / 右子结点大例如 结点48所以在大顶堆中,根节点是最大的!小顶堆的概念和大顶堆一样!第二张辅助图:在第二篇: 数据结构与算法:树 顺序存储二叉树(二)中提到一个概念,在这里有很大的作用,来回顾一下先通过数组构建一颗树,切记这个流程只是在你脑海里的过程!只是想象成这原创 2022-07-01 15:00:50 · 234 阅读 · 0 评论 -
数据结构与算法:树 线索化二叉树(中,前,后序)(三)
工具:IDEA本系列介绍的是数据结构: 树这是第三篇目前计划一共有12篇:敬请期待吧~~高光时刻先来回顾一下中序遍历每一个结点有2个对象,最终导致叶子结点就有所浪费当前一共有6个元素,分别是 [1,3,6,8,10,14], 最终就会导致有7个对象浪费(null)掉线索化二叉树就是尽量少浪费对象,那么空对象如何处理呢?先来看完整流程图,在逐步分析:最终结果图:中序线索化二叉树 就是按照中序遍历的结果将按照中序的排列连接起来当前中序遍历结果是 [8, 3, 10, 1, 14, 6]以10举例,10是叶子结点原创 2022-06-30 17:01:08 · 339 阅读 · 0 评论 -
数据结构与算法:树 顺序存储二叉树(二)
工具:IDEA本系列介绍的是数据结构: 树这是第二篇目前计划一共有12篇:敬请期待吧~~介绍: 顺序存储二叉树,就是将一串数组,以完全二叉树的结构可以前序,中序,后续遍历即可!小技巧:如图所示:下标n为4的值是45那么他的左子结点就是 2n + 1, 下标就是9,值是63那么他的右子结点就是 2n + 2 下标就是10 值是28那么他的父结点就是 (n - 1 ) / 2 下标就是1 值是23再来看一张图:n = 下标假设当前下标是7他的左子结点是 2n+1 ,左子结点对应的下标是15 (下标从0开始计算原创 2022-06-29 16:58:45 · 427 阅读 · 0 评论 -
数据结构与算法:树 二叉树入门(一)
工具:IDEA本系列介绍的是数据结构: 树这是第一篇目前计划一共有12篇:敬请期待吧~~高光事例:首先先来看一颗简单的树首先最顶部叫做树根,也叫根节点树根左右两侧分别有两个结点左子结点和右子结点统称为子结点那么换句话说就是 1的子结点有3 和 5或者此时3 是1的左子结点 ,3也是 12的父结点通俗的说:3又是父亲又是儿子其他叫法相同例如7的父结点是48的父结点是54的右子结点是6正常情况下一颗树都有2个结点(左子结点 / 右子结点),如果一颗树只有一边有结点,例如这样:那么8也可以叫做5的右残结点此时8没原创 2022-06-27 17:02:48 · 284 阅读 · 0 评论 -
数据结构与算法 查找算法(线性查找,二分查找,插值查找,斐波那契查找) 附有详细流程分析图!
工具:IDEA本篇介绍查找算法:重点:线性查找比较简单,就算刚入门也应该会,直接看代码了!使用:优缺点分析优点:缺点:重点:寻找数组必须有序一半一半的找指针记录这里的指针和C中的指针不同这里的指针可以理解为下标,就是找一个临时的数来记录当前位置二分查找只需要3个指针每次值和做比较如果需要寻找的元素 > 中间位置 ,说明 在中间指针右边所以需要将 开始指针 = 中间指针 + 1如果 < 中间位置 ,说明在中间指针左侧所以需要将 结束指针 = 中间指针最终需要找的元素和当前元素相同时候,说明找到了该原创 2022-06-04 22:29:48 · 823 阅读 · 0 评论 -
数据结构与算法 排序算法(二) 附有详细动画流程分析图!!
上一篇本篇介绍排序算法:重点:倒叙输出结果 (根据步长来倒叙)交换默认之前的数 始终是有序的始终和前面的数相比较原理:假设现在有10个数据,依次隔 length / 2次来排序第一次排序 隔5个元素来排序 (10 / 2 = 5)第二次排序 隔2个元素来排序(5 / 2 = 2)第三次排序 隔1个元素来排序(2 / 2 = 1)这样一来,就能将相邻的数字替换到大致位置, 减少了交换的次数效果图:交换和上一篇中的冒泡排序交换一样这段代码稍微有点复杂,多看几次就懂了!!这段代码懂了,在看希尔排序代码就十分清晰了原创 2022-06-01 17:03:19 · 755 阅读 · 0 评论 -
数据结构与算法 排序算法(一) 附有详细动画流程分析图
数据结构与算法 排序算法(一)Tips: 采用java语言, 关注博主,底部附有完整代码,本篇介绍排序算法:冒泡排序选择排序插入排序基数排序排序算法对比算法名称10万次测试效果图冒泡排序10万次 / 20秒选择排序10万次 / 3秒插入排序10万次 / 800毫秒基数排序10万次 / 22毫秒冒泡排序冒泡排序应该是最常见,最简单的排序算法了!要想学会冒泡排序,只需要记住 2 个重点找出最大值交换位置即可找原创 2022-05-29 22:17:23 · 1404 阅读 · 0 评论 -
数据结构与算法: 八皇后问题(详细流程)
数据结构与算法: 八皇后回溯递归问题(详细流程!!)Tips: 采用java语言, 关注博主,底部附有完整代码采用到的知识点:递归一维数组什么是8皇后问题?在一个8 x 8 的二维数组上, 每一个位置行 , 列 和 斜面 不允许有另一个元素存在例如这样定义规则这里只需要定义一个存放每一列的一维数组即可,这样就可以保证每一行都不会有相同的元素for(i = 0; i < 8 ; i++){ // 循环每一行}例如上面效果图对应的就是 0 , 4 , 7 ,5 ,原创 2022-05-12 23:01:28 · 1400 阅读 · 0 评论 -
数据结构与算法: 约瑟夫问题(丢手绢)
数据结构与算法: 约瑟夫(丢手绢)问题(单向链表,双向链表解决)Tips: 采用java语言, 关注博主,底部附有完整代码采用到的知识点:单向环形链表双向环形链表单向 / 双向 环形链表出圈流程效果图:单向环形链表双向环形链表什么是约瑟夫问题约瑟夫问题好像小时候玩的丢手绢一样先来说一下规则, 默认从第一个小朋友开始数,在第n个小朋友过后开始寻手绢, 第n个小朋友每k个人就丢下手绢,然后这个小朋友出圈直到圈中只剩一人才结束假设5个小朋友围坐一圈来丢手绢原创 2022-05-11 10:45:56 · 779 阅读 · 0 评论 -
数据结构与算法: 使用栈解决计算器问题
数据结构与算法:使用栈解决计算器问题Tips: 采用java语言, 关注博主,底部附有完整代码使用到的知识点:栈中后缀表达式后缀表达式中缀表达式转后缀表达式支持范围: + - * / 小括号() 小数点例如: 案例一: 20 - 5 + 25 / 5 + 20 / 5 + 100 - 24 - 0.4案例二: (3 + 5 + 2.5) - 2 * 5 效果图案例一案例二案例二思路分析图:案例一(不带括号)注释我写的很详细,直接看完整代码原创 2022-05-10 11:12:24 · 535 阅读 · 0 评论