
数据结构与算法
数据结构与算法
Mango学习日记
TA很懒,不爱学习
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构与算法单排日记-2020/4/1-树 & 二叉树查找
public class TreeNode { private int num;//节点标号 private String name;//节点信息 private TreeNode left; //左节点 private TreeNode right;//右节点 //构造方法 public TreeNode(int num, String nam...原创 2020-04-02 15:56:17 · 118 阅读 · 0 评论 -
数据结构与算法单排日记-2020/4/1-树 & 二叉树遍历
前序遍历: 先输出父节点,再遍历左子树,再遍历右子树中序遍历: 先遍历左子树,再输出父节点,再遍历右子树后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点小结: 看输出父节点的顺序,就确定是前序,中序还是后序树节点:public class TreeNode { private int num;//节点标号 private String name;//节点信息 ...原创 2020-04-01 22:27:08 · 145 阅读 · 0 评论 -
数据结构与算法单排日记-2020/4/1-树 & 二叉树概念
一. 为什么要用树二. 二叉树的概念根节点父节点子节点:二叉树的子节点分为左节点和右节点。叶子节点 (没有子节点的节点)节点的权(节点值)路径(从root节点找到该节点的路线)树的高度(最大层数)森林 :多颗子树构成森林树有很多种,每个节点最多只能有两个子节点的一种形式称为二叉树。二叉树的子节点分为左节点和右节点。如果该二叉树的所有叶子节点都在最后一层,并...原创 2020-04-01 21:42:13 · 140 阅读 · 0 评论 -
数据结构与算法单排日记-2020/4/1-查找算法&插值查找
和二分法两点不同就是int mid = left + (right - left) / 2 改成int mid = left + (right - left) * (num-arr[left]) / (a[right]-a[aleft])不存在的条件优化,防止mid越界if (left > right || arr[0] > num || num > arr[arr...原创 2020-04-01 17:11:25 · 109 阅读 · 0 评论 -
数据结构与算法单排日记-2020/4/1-查找算法&二分法查找
(找到首个马上退出)public class Binary { public static void main(String[] args) { int[] a = {1, 2, 3, 4, 5, 6, 7, 8}; int b = BinarySearch(a, 0, a.length - 1, 15); System.out.prin...原创 2020-04-01 16:53:17 · 156 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/27-排序算法&基数排序算法
基本思想将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后, 数列就变成一个有序序列。...原创 2020-03-27 16:08:57 · 151 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/27-排序算法&归并排序算法
基本思想归并排序算法的核心思想就是将两个有序的数列排序首先将一个无序的数列全部拆分,然后将两个有序的数列排序,递归代码实现核心代码:将两个无序的数组,合并成一个有序的数组创建一个新的数组,用于盛放排序结果,两个无序数组,同时从左开始遍历,并且比较大小,小的数放入新建数组,指针后移,大的等待下次比较当有一个数组被完全填充时,就直接将另一个数组剩下的数直接放入新建的数组...原创 2020-03-27 09:52:25 · 136 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/26-排序算法&快速排序算法
基本思想快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:步骤1:从数列中挑出一个元素,称为 “基准”(pivot );步骤2:重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;步骤3:递归地(r...原创 2020-03-26 09:13:24 · 148 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/22-排序算法&希尔排序
希尔排序法基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止代码实现(交换法)在这里插入代码片...原创 2020-03-22 13:10:24 · 191 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/21-排序算法&简单插入排序
简单插入排序的基本思想:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。过程代码:import java.util.Arrays;public class InsertSort { ...原创 2020-03-21 21:18:31 · 161 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/21-排序算法&选择排序
基本思想第一次从 arr[0] 到 arr[n-1] 中选取最小值,与arr[0]交换,第二次从 arr[1] 到 arr[n-1] 中选取最小值,与arr[1]交换,第三次从 arr[2] 到 arr[n-1] 中选取最小值,与arr[2]交换,…,第 i 次从arr[i-1]到 arr[n-1] 中选取最小值,与arr[i-1]交换,…,第n-1次从 arr[n-2] 到 ...原创 2020-03-21 14:15:50 · 169 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/21-排序算法&冒泡排序
冒泡排序(Bubble Sorting)的基本思想:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。冒泡排序应用实例我们举一个具体的案例来说明冒泡法。我们将五个无序的数:3, 9, -1, 10, -2 使用冒泡排序法将其排成一个从小到大的有序数列。小结冒泡排序规则(1) 一...原创 2020-03-21 13:15:14 · 220 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/21-排序算法-简介 & 复杂度
一. 简介排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:内部排序: 指将需要处理的所有数据都加载到内部存储器中进行排序。外部排序法: 数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。度量一个程序(算法)执行时间的两种方法:事后统计的方法:这种方法可行, 但是有两个问题:一是要想对设计的算法的运行性...原创 2020-03-21 11:22:24 · 214 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/20-递归 & 迷宫路径
一. 递归的概念递归就是方法自己调用自己1.1打印问题与阶乘public class RecTest { public static void main(String[] args) { test(5); int factorial = factorial(10); System.out.println(factorial); ...原创 2020-03-20 22:02:44 · 147 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/20-栈-表达式
一.中缀表达式1.1计算思路数入左,运入右栈空直接入,不空看优先大于等于则出栈,否则都入栈左括直接入,遇右吐出来数入左,运入右,栈空直接入不空看优先,栈顶元素为+,优先级小于扫描元素*的优先级,直接入栈数直接入左栈不空看优先,栈顶元素为*,优先级等于扫描元素的优先级,出栈运算,结果入左栈将左栈 3 取出,放左边,右栈 取出放中间,再取左栈7,放右边,运算结果入...原创 2020-03-20 19:50:02 · 221 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/7-栈
1.栈的应用场景子程序的调用:在跳往子程序前,会先将下个指令的地址存到堆栈中,直到子程序执行完后再将地址取出,以回到原来的程序中。处理递归调用:和子程序的调用类似,只是除了储存下一个指令的地址外,也将参数、区域变量等数据存入堆栈中。表达式的转换[中缀表达式转后缀表达式]与求值(实际解决)。二叉树的遍历。图形的深度优先(depth一first)搜索法。2.数组模拟栈的思路分...原创 2020-03-07 22:19:48 · 141 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/7-链表之单向环形链表及约瑟夫问题
Josephu(约瑟夫、约瑟夫环) 问题Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。提示:用一个不带头结点的循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表,然后...原创 2020-03-07 15:33:01 · 188 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/6-链表之双链表
流程:双链表的应用实例1. 双链表的遍历,增加,修改,删除思路:遍历 方和 单链表一样,只是可以向前,也可以向后查找添加(默认添加到双向链表的最后):(1) 先找到双向链表的最后这个节点(2) temp.next = newHeroNode(3) newHeroNode.pre = temp;修改 思路和 原来的单向链表一样.删除:(1) 因为是双向链表,因此,我们可以...原创 2020-03-06 16:25:33 · 136 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/5-链表之单链表-面试题
一.获取到单链表的节点的个数(如果是带头结点的链表,需求不统计头节点)public class Demo01 { public static void main(String[] args) { Node one = new Node(1, "宋江", "及时雨"); Node two = new Node(2, "卢俊义", "玉麒麟"); ...原创 2020-03-06 11:11:08 · 202 阅读 · 0 评论 -
数据结构与算法单排日记-2020/3/4-链表之单链表
流程:单链表的应用实例1. 单链表的建立:使用带head头的单向链表实现 –水浒英雄排行榜管理完成对英雄人物的增删改查操作, 注: 删除和修改,查找第一种方法在添加英雄时,直接添加到链表的尾部第二种方式在添加英雄时,根据排名将英雄插入到指定位置(如果有这个排名,则添加失败,并给出提示)1.1第一种方法:添加英雄时,直接添加到链表的尾部添加(创建)1.先创建一个head ...原创 2020-03-05 17:09:49 · 190 阅读 · 0 评论 -
数据结构与算法单排日记-2020/2/29-队列
1.队列是一个有序列表,可以用数组或者链表表示。2.遵循先入先出的原则:先存入队列的数据,要先取出。后存入的要后取出。数组模拟队列队列本身是一个有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下。其中maxSize是该队列的最大容量。因为队列的输出、输入分别从前后端来处理,因此需要两个变量front及rear分别记录前后端的下标。将数据存入队列(addQueue)...原创 2020-03-04 09:23:20 · 295 阅读 · 0 评论 -
数据结构与算法单排日记-2020/2/29-数据结构综述
1.栈——先进先出入口出口在集合的一侧2.队列——先进先出入口和出口在集合的一侧3.数组:查询快,增删慢查询快:数组的地址是连续的,通过数组的首地址找到数组,通过数组的索引可以快速查找某个元素增删慢:数组长度固定,想要增加/删除一个元素,必须创建一个新数组,把源数组复制过来3.链表:查询慢,增删快查询慢:链表的地址是不连续的,每次查询元素都要从头开始增删快:链表结构,增加...原创 2020-02-29 15:55:29 · 157 阅读 · 0 评论 -
数据结构与算法单排日记-2020/2/29-稀疏数组
如果一个数组(包括多维数组)中的大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组,节约空间。 二维数组转稀疏数组:记录数组一共有几行几列,有多少个不同的数值。把具有不同值的元素的行列及记录在一个小规模的数组中,从而缩小程序的规模。 稀疏数组转二维数组思路:历二维数组,得到有效个数sum。根据sum就可以创建稀疏数组sparseArr int[sum+1...原创 2020-02-29 15:39:54 · 121 阅读 · 0 评论