
数据结构
三郎君
写文章勤分享:巩固自己,帮助他人,何乐而不为!
展开
-
三郎数据结构算法学习笔记:如何根据序列构建平衡二叉搜索树?
如何根据序列构建平衡二叉搜索树?什么是平衡二叉搜索树(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 · 3167 阅读 · 5 评论 -
Spring框架中都用到了哪些设计模式?
Spring框架中都用到了哪些设计模式?(1)工厂模式:BeanFactory就是简单工厂模式的体现,用来创建对象的实例;(2)单例模式:Bean默认为单例模式。(3)代理模式:Spring的AOP功能用到了JDK的动态代理和CGLIB字节码生成技术;(4)模板方法:用来解决代码重复的问题。比如. RestTemplate, JmsTemplate, JpaTemplate。(5)观察者模式:定义对象键一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得原创 2020-12-07 15:52:06 · 945 阅读 · 0 评论 -
三郎数据结构算法学习笔记:线索二叉树
三郎数据结构算法学习笔记:线索二叉树概念应用实例说明运行结果源代码概念n 个结点的二叉链表中含有 n+1 【公式 2n-(n-1)=n+1】 个空指针域。利用二叉链表中的空指针域,存放指向该结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种一个结点的前一个结点,称为前驱结点一原创 2020-12-07 15:44:17 · 238 阅读 · 1 评论 -
三郎数据结构算法学习笔记:顺序存储二叉树
三郎数据结构算法学习笔记:顺序存储二叉树概念图示特点示例运行结果源代码概念从数据存储来看,数组存储方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组图示特点顺序存储二叉树的特点:顺序二叉树通常只考虑完全二叉树第 n 个元素的左子节点为 2 * n + 1第 n 个元素的右子节点为 2 * n + 2第 n 个元素的父节点为 (n-1) / 2n : 表示二叉树中的第几个元素(按 0 开始编号如图所示)示例需求: 给你一个数组 {1,2,3,4,5,6,7}原创 2020-12-07 15:23:10 · 522 阅读 · 1 评论 -
三郎数据结构算法学习笔记:二叉树的三种遍历及增删改查
三郎数据结构算法学习笔记:二叉树的三种遍历二叉树遍历的说明遍历图示运行结果源代码(自己去掉注释)二叉树遍历的说明前序遍历: 根左右中序遍历: 左根右后序遍历:左右根遍历图示运行结果源代码(自己去掉注释)package com.atguigu.tree;public class BinaryTreeDemo { public static void main(String[] args) { //先需要创建一颗二叉树 BinaryTree binaryTree =原创 2020-12-07 15:11:54 · 126 阅读 · 0 评论 -
三郎数据结构算法学习笔记:哈希表查找
三郎数据结构算法学习笔记:哈希表查找哈希表的基本介绍上机题:要求:图示运行结果源代码哈希表的基本介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组 叫做散列表。上机题:有一个公司,当有新的员工来报道时,要求将该员工的信息加入(id,性别,年龄,名字,住址…),当输入该员工的 id 时,要求查找到该员工的 所有信息.要求原创 2020-12-07 15:04:29 · 250 阅读 · 1 评论 -
三郎数据结构算法学习笔记:斐波那契(黄金分割法)查找算法
三郎数据结构算法学习笔记:斐波那契[黄金分割法]查找算法算法介绍原理运行结果源代码算法介绍斐波那契(黄金分割法)查找基本介绍:黄金分割点是指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。取其前三位数字的近似值是 0.618。由于按此比例设计的造型十分美丽,因此称为黄金分割,也称为中外比。这是一个神奇的数字,会带来意向不大的效果。斐波那契数列 {1, 1, 2, 3, 5, 8, 13, 21, 34, 55 }发现斐波那契数列的两个相邻数 的比例,无限接近 黄金分原创 2020-11-25 16:42:57 · 187 阅读 · 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 · 221 阅读 · 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 · 201 阅读 · 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 · 209 阅读 · 0 评论 -
三郎数据结构算法学习笔记:各种排序算法时间复杂度比较
各种排序算法时间复杂度比较如下图:相关术语解释:稳定:如果 a 原本在 b 前面,而 a=b,排序之后 a 仍然在 b 的前面;不稳定:如果 a 原本在 b 的前面,而 a=b,排序之后 a 可能会出现在 b 的后面;内排序:所有排序操作都在内存中完成;外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行;时间复杂度: 一个算法执行所耗费的时间。空间复杂度:运行完一个程序所需内存的大小。n: 数据规模k: “桶”的个数In-place:不占用额外内存O原创 2020-11-24 19:41:32 · 215 阅读 · 0 评论 -
三郎数据结构算法学习笔记:基数排序
三郎数据结构算法学习笔记:基数排序排序介绍思想图示运行结果源代码排序介绍基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或 bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法基数排序(Radix Sort)是桶排序的扩展基数排序是 1887 年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不原创 2020-11-24 19:37:56 · 201 阅读 · 1 评论 -
三郎数据结构算法学习笔记:快速排序
三郎数据结构算法学习笔记:快速排序快速排序法介绍基本思想:图解运行结果源代码快速排序法介绍快速排序(Quicksort)是对冒泡排序的一种改进。基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列图解运行结果不愧是快速排序:排序前和排序后一秒内完成源代码package com.atguigu.sort;import ja原创 2020-11-24 13:40:04 · 237 阅读 · 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 · 159 阅读 · 0 评论 -
三郎数据结构算法学习笔记:插入排序
三郎数据结构算法学习笔记:插入排序排序介绍插入排序法介绍:插入排序法思想:图示运行结果源代码排序介绍插入排序法介绍:插入式排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。插入排序法思想:插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有 序表中只包含一个元素,无序表中包含有 n-1 个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将原创 2020-11-24 13:16:03 · 146 阅读 · 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 · 109 阅读 · 0 评论 -
三郎数据结构算法学习笔记:冒泡排序及其简单优化
三郎数据结构算法学习笔记:冒泡排序及其简单优化基本思想优化图示结果源代码基本思想冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。优化因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在 排序过程中设置一个标志 flag 判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排原创 2020-11-24 13:00:48 · 111 阅读 · 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 · 209 阅读 · 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 · 117 阅读 · 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 · 436 阅读 · 7 评论 -
三郎数据结构算法学习笔记:单向环形链表约瑟夫问题
单向环形链表约瑟夫问题什么是单向环形链表?什么是约瑟夫问题?Josephu 问题:具体思路参考代码:实验结果:什么是单向环形链表? 链表收尾逻辑相连,且只能单向遍历,区别于双向什么是约瑟夫问题?一开始是一个故事可以百度一下。Josephu 问题:设编号为 1,2,… n 的 n 个人围坐一圈,约定编号k(1<=k<=n)的人从 1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。原创 2020-11-03 20:20:21 · 261 阅读 · 3 评论 -
三郎数据结构算法学习笔记:数组模拟环形队列系统附完整源代码
三郎数据结构算法学习笔记:数组模拟环形队列环形队列:满足队列先进先出特点,此外加上条件强制性的首尾相连值得注意的是这里的首尾相连是逻辑层面上的,不是物理层面上的本次采用的是数组模拟环形队列,不是链表哦结果展示:参考完整源代码:/* * author:sanalang * time:2020.10.26 * function: CircleArrayQueue based on array * */import java.util.Scanner;class CircleArr原创 2020-10-26 20:29:17 · 165 阅读 · 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 · 157 阅读 · 0 评论 -
三郎数据结构算法学习笔记:稀疏数组
数据结构算法学习笔记:稀疏数组算法:稀疏数组用途:对于一堆数据,里面大部分数据相同,只有少部分不同,若直接存储会造成空间浪费,为此采用稀疏数组来存储数据思想:我们可以新建另一个数组,存储原数组的空间结构,和各个不同值的位置和值,再把这个数组存储到原数组中,当访问原数组在根据这个数组,还原原数组数据。图解如下:图上我可以看到,新建了一个稀疏数组,它存放了相关数据:原数组行列数,不同值个数;各个不同值在原数组中的位置和值。至此相信大家已经知道如何还原了,根据稀疏数组,条件循环一下,生成原数组就十分简原创 2020-10-24 20:02:38 · 246 阅读 · 1 评论