算法与数据结构
学习算法与数据结构
Mr.东方老赢
一个执着于java的小白
展开
-
数据结构与算法入门——稀疏数组
当二维数组有大量0元素时,可进行数组压缩,形成稀疏数组 二维数组转稀疏数组的思路: 1.遍历原始的二维数组,得到有效数据的个数value 2.根据sum就可以创建稀疏数组sparseArray int[value+ 1][3]; 3.将二维数组的有效数据数据存入到稀疏数组 稀疏数组转原始的二维数组的思路: 1.先读取稀疏数组的第- -行,根据第一行的数据,创建原始的二维数组 2.在...原创 2020-03-28 17:28:42 · 435 阅读 · 0 评论 -
数据结构与算法入门——二叉树之平衡二叉树&单螺旋&双螺旋
平衡二叉树概述 上一篇讲过的二叉排序树,使在二叉树中查找结点变得比较快,但也会有个别情况,例如: int[] arr = new int[]{1,2,3,4,5,6,7,}; 像这种有序数组组成的二叉树就会是这样 而这样的二叉树查找并不会比其他的查找方式更快。因此,针对二叉排序树的这一短板,平衡二叉树在二叉排序树的基础上做了优化。 平衡二叉树:也叫AVL数,本质上也是一棵二叉排序树,但是它所做...原创 2020-03-19 14:12:39 · 483 阅读 · 0 评论 -
数据结构与算法入门——二叉树之二叉排序树
二叉排序树概述 为什么会有二叉排序树 之前我们学过顺序存储的二叉树和链式存储的二叉树,他俩都面临着结点的查询比较慢的缺点,于是便有了二叉排序树 什么是二叉排序树 二叉排序树,也叫二叉查找树,二叉搜索树,顾名思义查找结点便是十分方便。对于二叉树中任何一个非叶子结点,要求左子结点比当前结点值小,右子结点比当前结点大,因此针对于这种排列方式,要求该树不能有相同的结点 结点的增删查 //结点类...原创 2020-03-16 19:22:39 · 428 阅读 · 0 评论 -
数据结构与算法入门——二叉树之赫夫曼树
赫夫曼树概述 赫夫曼树,也叫哈夫曼树、最优二叉树,他是n个带权叶子结点构成的二叉树中,带权路径长度最小的二叉树。 叶结点的带权路径:即从根结点到目标叶子结点的路径长度乘以目标结点的权 树的带权路径长度WPL:树中所有的叶子结点的带权路径长度之和 赫夫曼树代码的实现 赫夫曼编码的实现 赫夫曼编码代码实现 ...原创 2020-03-16 14:15:17 · 470 阅读 · 0 评论 -
数据结构与算法入门——二叉树之线索二叉树
线索二叉树的概述 为什么用线索二叉树? 在之前遍历二叉树时无论前序、中序、还是后续都会有一个问题,你想要找到一个结点前面或后面的结点都是十分困难的,你需要经过不断地遍历,就会造成资源的大量浪费,线索二叉树引入了前驱和后继的概念,即将每一个结点当做一个双链表的结点,前一个结点是前驱,后一个结点是后继,这样就可以根据任一个结点找到他前面或者后面的结点了 什么是线索二叉树? 对于n个结点的二叉树...原创 2020-03-13 17:23:04 · 477 阅读 · 0 评论 -
数据结构与算法入门——二叉树之链式存储的二叉树、顺序存储的二叉树
链式存储的二叉树 创建二叉树并添加节点 //节点类 public class TreeNode { //节点的权 int value; //左结点 TreeNode lNode; //右结点 TreeNode rNode; public TreeNode(int value) { this.value = value; ...原创 2020-03-10 11:41:32 · 441 阅读 · 0 评论 -
数据结构与算法入门——树结构之二叉树
什么是树结构? 直接上图:这种数据结构就像一个倒过来的树一样,最上面是根结点,往下延伸的是树枝,也叫结点。这就是树结构的元素排列顺序 为什么要用树结构? 查找数据和插入数据的效率更高 基本概念 根结点:就是树结构最上面的结点 双亲结点:每一个结点都是它所延伸出来的结点的双亲结点,如上图,B是C、D的双亲节点 子结点:与双亲结点相反,每一个节点延伸出来的结点都是它的子结点,如上图,C、...原创 2020-03-08 16:11:49 · 465 阅读 · 0 评论 -
数据结构与算法入门——排序算法之八大常用排序方法
冒泡排序 //定义一个数组 int[] arr = new int[]{8,5,7,6,1,3,9,4}; //共比较多少轮 for (int i = 0; i < arr.length-1; i++) { //一轮比较多少次 for (int j = 0; j < arr.lengt...原创 2020-03-12 11:59:04 · 496 阅读 · 0 评论 -
通俗的理解递归:就是自己玩自己!
没错,递归就是在自己的方法体内调用自己,说白了就是自己玩自己,所以这相当于一个无限循环,因为他自己一直存在,那就一直可以玩自己,所以还要加上让它停止的条件,要不然他就把自己玩坏了,就会报异常。 递归比较有代表性的就是斐波那契数列:1 1 2 3 5 8… 就是从第三项开始,每一项等于前两项之和。话不多说上代码 public class Fibonacci { public st...原创 2020-03-05 11:53:41 · 552 阅读 · 1 评论 -
数据结构与算法入门——线性结构之循环链表、双链表
循环链表:顾名思义就是将单链表的头和尾连起来,形成一条循环的链表,那么自然就是在单链表的基础上做一点改动,将单链表的第一个节点作为最后一个节点的下一个节点即可 package SingleList; //循环链表 public class LoopNode { //节点内容 int date; //定义下一个节点就是自己 LoopNode next = this;...原创 2020-03-05 10:25:19 · 413 阅读 · 0 评论 -
数据结构与算法入门——线性结构之单链表
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。就好像一列火车,每一节车厢后面都会跟着另一节车厢。 public class Node { ...原创 2020-02-27 17:49:35 · 461 阅读 · 1 评论 -
数据结构与算法入门——线性结构之栈、队列
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。它包括栈顶和栈底。向栈中添加一个元素称为进栈、入栈或压栈,从一个栈删除元素又称作出栈或退栈。有趣的是它的元素管理方式是“先进后出”,即最先入栈的一个元素,却是最后一个出栈。就好比压手枪弹夹,第一颗被压入的子弹在弹夹底部,等到最后一枪才能打出第一颗子弹。...原创 2020-02-23 18:07:59 · 364 阅读 · 0 评论 -
数据结构与算法入门——线性结构之数组
一、数组的基本使用 //创建一个数组 int[] arr1 = new int[3]; int[] arr2 = new int[]{10,20,30}; //获取数组的长度 int len1 = arr1.length; int len2 = arr2.length; System.out.p...原创 2020-02-22 19:44:16 · 405 阅读 · 0 评论 -
数据结构与算法之小白进阶
数据结构与算法概述 作为一个马上要面对实习的大学生,我深知自己的知识水平和能力的有限,所以准备从现在开始主攻数据结构与算法,虽然之前也有过接触,但是没有系统、全面的了解过,作为面试与工作中必备的重要技能,学好数据结构与算法是非常重要的。所以我会与大家一起分享每天学习的经验所得,希望每一个奋斗在这条路上的朋友都会达到自己心中理想的目标 &n...原创 2020-02-22 15:43:59 · 482 阅读 · 0 评论