
数据结构
三郎君
写文章勤分享:巩固自己,帮助他人,何乐而不为!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
三郎数据结构算法学习笔记:如何根据序列构建平衡二叉搜索树?
如何根据序列构建平衡二叉搜索树?什么是平衡二叉搜索树(AVL)?1、AVL树的定义2、AVL树的特点什么是右单旋转?什么是左单旋转?什么是双旋转?RR RL LR什么意思?实例题目过程 什么是平衡二叉搜索树(AVL)? 1、AVL树的定义 AVL树又称平衡二叉搜索树,它能保证二叉树高度相对平衡,尽量降低二叉树的高度,提高搜索效率 2、AVL树的特点 (1)AVL的左右子树高度之差的绝对值不超过1 (2)树中的每个左子树和右子树都是AVL树 (3)每个节点都有一个平衡因子,任一节点的平衡因子只能是 (-1、0原创 2020-12-08 09:37:58 · 3197 阅读 · 5 评论 -
Spring框架中都用到了哪些设计模式?
Spring框架中都用到了哪些设计模式? (1)工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例; (2)单例模式:Bean默认为单例模式。 (3)代理模式:Spring的AOP功能用到了JDK的动态代理 和CGLIB字节码生成技术; (4)模板方法:用来解决代码重复的问题。 比如. RestTemplate, JmsTemplate, JpaTemplate。 (5)观察者模式:定义对象键一种一对多的依赖关系, 当一个对象的状态发生改变时,所有依赖于它的对象都会得原创 2020-12-07 15:52:06 · 955 阅读 · 0 评论 -
三郎数据结构算法学习笔记:线索二叉树
三郎数据结构算法学习笔记:线索二叉树概念应用实例说明运行结果源代码 概念 n 个结点的二叉链表中含有 n+1 【公式 2n-(n-1)=n+1】 个空指针域。 利用二叉链表中的空指针域, 存放指向该结点在某种遍历次序下的前驱和后继结点的指针 (这种附加的指针称为"线索") 这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。 根据线索性质的不同,线索二叉树可分为 前序线索二叉树、中序线索二叉树和后序线索二叉树三种 一个结点的前一个结点,称为前驱结点 一原创 2020-12-07 15:44:17 · 248 阅读 · 1 评论 -
三郎数据结构算法学习笔记:顺序存储二叉树
三郎数据结构算法学习笔记:顺序存储二叉树概念图示特点示例运行结果源代码 概念 从数据存储来看,数组存储方式和树的存储方式可以相互转换, 即数组可以转换成树,树也可以转换成数组 图示 特点 顺序存储二叉树的特点: 顺序二叉树通常只考虑完全二叉树 第 n 个元素的左子节点为 2 * n + 1 第 n 个元素的右子节点为 2 * n + 2 第 n 个元素的父节点为 (n-1) / 2 n : 表示二叉树中的第几个元素(按 0 开始编号如图所示) 示例 需求: 给你一个数组 {1,2,3,4,5,6,7}原创 2020-12-07 15:23:10 · 547 阅读 · 1 评论 -
三郎数据结构算法学习笔记:二叉树的三种遍历及增删改查
三郎数据结构算法学习笔记:二叉树的三种遍历二叉树遍历的说明遍历图示运行结果源代码(自己去掉注释) 二叉树遍历的说明 前序遍历: 根左右 中序遍历: 左根右 后序遍历:左右根 遍历图示 运行结果 源代码(自己去掉注释) package com.atguigu.tree; public class BinaryTreeDemo { public static void main(String[] args) { //先需要创建一颗二叉树 BinaryTree binaryTree =原创 2020-12-07 15:11:54 · 130 阅读 · 0 评论 -
三郎数据结构算法学习笔记:哈希表查找
三郎数据结构算法学习笔记:哈希表查找哈希表的基本介绍上机题:要求:图示运行结果源代码 哈希表的基本介绍 散列表(Hash table,也叫哈希表), 是根据关键码值(Key value)而直接进行访问的数据结构。 也就是说,它通过把关键码值映射到表中一个位置来访问记录, 以加快查找的速度。这个映射函数叫做散列函数, 存放记录的数组 叫做散列表。 上机题: 有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,名字,住址…),当输入该员工的 id 时,要求查找到该员工的 所有信息. 要求原创 2020-12-07 15:04:29 · 280 阅读 · 1 评论 -
三郎数据结构算法学习笔记:斐波那契(黄金分割法)查找算法
三郎数据结构算法学习笔记:斐波那契[黄金分割法]查找算法算法介绍原理运行结果源代码 算法介绍 斐波那契(黄金分割法)查找基本介绍: 黄金分割点是指把一条线段分割为两部分, 使其中一部分与全长之比等于另一部分与这部分之比。 取其前三位数字的近似值是 0.618。 由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。 这是一个神奇的数字,会带来意向不大的效果。 斐波那契数列 {1, 1, 2, 3, 5, 8, 13, 21, 34, 55 } 发现斐波那契数列的两个相邻数 的比例,无限接近 黄金分原创 2020-11-25 16:42:57 · 199 阅读 · 1 评论 -
三郎数据结构算法学习笔记:插值查找算法
三郎数据结构算法学习笔记:插值查找算法算法介绍图示运行结果源代码 算法介绍 插值查找算法 插值查找原理介绍: 插值查找算法类似于二分查找,不同的是插值查找每次从自适应 mid 处开始查找。 将折半查找中的求 mid 索引的公式 , low 表示左边索引 left, high 表示右边索引;right. key 就是前面我们讲的 findVal 插值索引: int mid = low + (high - low) * (key - arr[low]) / (arr[high] - arr[low]) ; 对原创 2020-11-24 19:59:56 · 234 阅读 · 1 评论 -
三郎数据结构算法学习笔记:二分法查找
三郎数据结构算法学习笔记:二分法查找查找算法介绍图示运行结果源代码 查找算法介绍 前提:一组数据已经是有序的 分成俩部分,索引与midvalue进行比较 进入部分中,减少了查找次数 图示 运行结果 源代码 package com.atguigu.search; import java.util.ArrayList; import java.util.List; //注意:使用二分查找的前提是 该数组是有序的. public class BinarySearch { public static v原创 2020-11-24 19:54:39 · 214 阅读 · 0 评论 -
三郎数据结构算法学习笔记:顺序查找算法
三郎数据结构算法学习笔记:顺序查找算法查找算法介绍运行结果源代码 查找算法介绍 根据下表等索引按照先后顺序查找的算法 如果找到了,就提示找到,并给出下标值 运行结果 源代码 package com.atguigu.search; public class SeqSearch { public static void main(String[] args) { int arr[] = { 1, 9, 11, -1, 34, 89 };// 没有顺序的数组 int index = seqSear原创 2020-11-24 19:45:59 · 221 阅读 · 0 评论 -
三郎数据结构算法学习笔记:各种排序算法时间复杂度比较
各种排序算法时间复杂度比较 如下图: 相关术语解释: 稳定:如果 a 原本在 b 前面,而 a=b,排序之后 a 仍然在 b 的前面; 不稳定:如果 a 原本在 b 的前面,而 a=b,排序之后 a 可能会出现在 b 的后面; 内排序:所有排序操作都在内存中完成; 外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 时间复杂度: 一个算法执行所耗费的时间。 空间复杂度:运行完一个程序所需内存的大小。 n: 数据规模 k: “桶”的个数 In-place:不占用额外内存 O原创 2020-11-24 19:41:32 · 222 阅读 · 0 评论 -
三郎数据结构算法学习笔记:基数排序
三郎数据结构算法学习笔记:基数排序排序介绍思想图示运行结果源代码 排序介绍 基数排序(radix sort)属于“分配式排序”(distribution sort), 又称“桶子法”(bucket sort)或 bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用 基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法 基数排序(Radix Sort)是桶排序的扩展 基数排序是 1887 年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不原创 2020-11-24 19:37:56 · 215 阅读 · 1 评论 -
三郎数据结构算法学习笔记:快速排序
三郎数据结构算法学习笔记:快速排序快速排序法介绍基本思想:图解运行结果源代码 快速排序法介绍 快速排序(Quicksort)是对冒泡排序的一种改进。 基本思想: 通过一趟排序将要排序的数据分割成独立的两部分, 其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对这两部分数据分别进行快速排序, 整个排序过程可以递归进行,以此达到整个数据变成有序序列 图解 运行结果 不愧是快速排序:排序前和排序后一秒内完成 源代码 package com.atguigu.sort; import ja原创 2020-11-24 13:40:04 · 243 阅读 · 5 评论 -
三郎数据结构算法学习笔记:希尔排序
三郎数据结构算法学习笔记:希尔排序排序介绍图示运行结果源代码 排序介绍 希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序 图示 运行结果 源代码 package com.atguigu.sort; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; public c原创 2020-11-24 13:22:02 · 164 阅读 · 0 评论 -
三郎数据结构算法学习笔记:插入排序
三郎数据结构算法学习笔记:插入排序排序介绍插入排序法介绍:插入排序法思想:图示运行结果源代码 排序介绍 插入排序法介绍: 插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。 插入排序法思想: 插入排序(Insertion Sorting)的基本思想是: 把 n 个待排序的元素看成为一个有序表和一个无序表, 开始时有 序表中只包含一个元素,无序表中包含有 n-1 个元素, 排序过程中每次从无序表中取出第一个元素, 把它的排序码依次与有序表元素的排序码进行比较, 将原创 2020-11-24 13:16:03 · 155 阅读 · 0 评论 -
三郎数据结构算法学习笔记:选择排序
三郎数据结构算法学习笔记:选择排序基本介绍算法思想图示:运行结果:源代码: 基本介绍 选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到 排序的目的。 算法思想 选择排序(select sorting)也是一种简单的排序方法。它的基本思想是: 第一次从 arr[0]~arr[n-1]中选取最小值,arr[0]交换, 第二次从 arr[1]~arr[n-1]中选取最小值,与 arr[1]交换, 第三次从 arr[2]~arr[n-1]中选取最小值,与 arr[2]原创 2020-11-24 13:08:33 · 125 阅读 · 0 评论 -
三郎数据结构算法学习笔记:冒泡排序及其简单优化
三郎数据结构算法学习笔记:冒泡排序及其简单优化基本思想优化图示结果源代码 基本思想 冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。 优化 因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在 排序过程中设置一个标志 flag 判断元素是否进行过交换。从而减少不必要的比较。 (这里说的优化,可以在冒泡排原创 2020-11-24 13:00:48 · 120 阅读 · 0 评论 -
三郎数据结构学习笔记:归并排序
归并排序思想图解参考源代码 思想 分治 + 递归 图解 这里下面操作就是两个有序数列的合并了 参考源代码 import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; public class MergetSort { public static void main(String[] args) { //int arr[] = { 8, 4, 5, 7, 1, 3, 6, 2 }; // //测原创 2020-11-16 19:35:19 · 219 阅读 · 4 评论 -
三郎数据结构学习笔记:栈实现表达式计算
栈实现表达式计算一:思路二: java实现源代码 栈实现表达式计算 一:思路 二: java实现源代码 public class Calculator { public static void main(String[] args) { //根据前面老师思路,完成表达式的运算 String expression = "7*2*2-5+1-5+3-4"; // 15//如何处理多位数的问题? //创建两个栈,数栈,一个符号栈 ArrayStack2 numStack = new ArrayStack2(原创 2020-11-15 10:26:51 · 126 阅读 · 1 评论 -
三郎数据结构学习笔记:双向循环链表(判断是否对称)附源码
双向循环链表题目思想实验结果完整源代码 题目 建立一个带头结点的双向循环链表, 赋值,判断是否对称,写出算法计算时间复杂度 思想 travel the Link ;遍历链表 put values into a array ;赋值给一个数组 compare the array to know whether it belong to symmetry 比较数组是否对称 采用问题转化的思想 将链表问题转换成数组问题,大大降低了思考难度 时间复杂度O(n^2) 因为有两个for循环 实验结果 比较次数本来可以更原创 2020-11-05 20:09:53 · 459 阅读 · 7 评论 -
三郎数据结构算法学习笔记:单向环形链表约瑟夫问题
单向环形链表约瑟夫问题什么是单向环形链表?什么是约瑟夫问题?Josephu 问题:具体思路参考代码:实验结果: 什么是单向环形链表? 链表收尾逻辑相连,且只能单向遍历,区别于双向 什么是约瑟夫问题? 一开始是一个故事可以百度一下。 Josephu 问题: 设编号为 1,2,… n 的 n 个人围坐一圈,约定编号k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。原创 2020-11-03 20:20:21 · 281 阅读 · 3 评论 -
三郎数据结构算法学习笔记:数组模拟环形队列系统附完整源代码
三郎数据结构算法学习笔记:数组模拟环形队列 环形队列:满足队列先进先出特点,此外加上条件强制性的首尾相连 值得注意的是这里的首尾相连是逻辑层面上的,不是物理层面上的 本次采用的是数组模拟环形队列,不是链表哦 结果展示: 参考完整源代码: /* * author:sanalang * time:2020.10.26 * function: CircleArrayQueue based on array * */ import java.util.Scanner; class CircleArr原创 2020-10-26 20:29:17 · 171 阅读 · 0 评论 -
三郎数据结构算法学习笔记:数组模拟队列系统
用数组模拟队列 队列特点:先进先出 算法思想:这里我们用数组模拟队列 假设数组容量上限MaxSize 放置好头尾指针 结果演示: /* * author:sanalang * time:2020.10.25 * function: ArrayQueue based on array * */ import java.util.Scanner; class ArrayQueueDemo { public static <handle> void main(String[] args) {原创 2020-10-25 19:02:05 · 169 阅读 · 0 评论 -
三郎数据结构算法学习笔记:稀疏数组
数据结构算法学习笔记:稀疏数组 算法:稀疏数组 用途:对于一堆数据,里面大部分数据相同,只有少部分不同,若直接存储会造成空间浪费,为此采用稀疏数组来存储数据 思想:我们可以新建另一个数组,存储原数组的空间结构,和各个不同值的位置和值,再把这个数组存储到原数组中,当访问原数组在根据这个数组,还原原数组数据。图解如下: 图上我可以看到,新建了一个稀疏数组,它存放了相关数据:原数组行列数,不同值个数;各个不同值在原数组中的位置和值。 至此相信大家已经知道如何还原了,根据稀疏数组,条件循环一下,生成原数组就十分简原创 2020-10-24 20:02:38 · 257 阅读 · 1 评论