自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (2)
  • 收藏
  • 关注

原创

What前面的博客中将了数组、链表、树,他们都是数据结构,而图也是指的一种数据结构,如图1就是一个图图1Why对于线性表(数组、链表),他们只有一个直接前驱和直接后继对于树,每个节点虽然可能有多个直接后继(子节点),但是只有一个直接前驱(父节点)线性表和树能够满足一对一、一对多的关系,但是当我们需要多对多的关系时怎么办,这个时候就用到图,如图1H...

2020-03-09 20:00:51 153

原创 多叉树、多路查找树、B树、B+树、B*树介绍

What在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(multiway tree)后面会讲到2-3树(如图2)、2-3-4树、B树、B+树,他们都是多叉树图1.二叉树图2.多叉树(2-3树)Why二叉树的操作效率较高,但是也存在问题由于构建二叉树时需要把数据从某个地方(数...

2020-02-16 17:45:44 2057

原创 平衡二叉树AVL

What平衡二叉树AVL:平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree),又被称为AVL树, 可以保证查询效率较高。它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等如图1中的第一棵树和第二棵树都是平衡二叉树...

2020-02-09 21:08:34 150

原创 二叉排序树BST

What二叉排序树BST: (Binary Sort Tree 或 Binary Search Tree), 对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。对于相同的值,可以放在左节点或右节点。Why对于数组:如果数组有序,那么查找速度会很快O(lgn)(使用二分查找),但是增删会很慢(会整体移动数组的一部分会...

2020-02-04 17:51:41 140

原创 赫夫曼树

基本介绍给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为赫夫曼树(Huffman Tree),为啥加赫夫曼树,因为是赫夫曼大叔发明的。只凭上面这句话肯定是不能理解什么是赫夫曼树的1. 赫夫曼大叔说了,从树的一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。如图1所示加粗的线条就是从根...

2020-01-21 23:18:11 113

原创 堆排序

堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它是不稳定排序(相同的两个值排序后的先后顺序可能发生变化)。堆是具有以下性质的完全二叉树每个结点的值都大于或等于其左右孩子结点的值,称为 大顶堆 ,如图1。 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或...

2020-01-21 23:15:32 67

原创 使用SpringBoot时关于静态资源的访问问题

一、先说默认的静态资源路径下面截取了一段ResourceProperties类的源码,可以看到定义了一个final数组CLASSPATH_RESOURCE_LOCATIONS并初始化了一些值,这些值就是默认的静态资源路径,这些文件夹下的文件可以直接访问。@ConfigurationProperties(prefix = "spring.resources", ignoreUnk...

2020-01-03 20:10:25 1335

原创 赫夫曼树

基本介绍给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为最优二叉树,也称为赫夫曼树(Huffman Tree),为啥加赫夫曼树,因为是赫夫曼大叔发明的。只凭上面这句话肯定是不能理解什么是赫夫曼树的1. 赫夫曼大叔说了,从树的一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。如图1所示加粗的线条就是从根节点到节点C的路径...

2019-10-20 22:41:50 460

原创 算法时间复杂度

时间频度基本介绍:一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。举例:如下是计算1-n的和的两种算法for(int i = 0;i<=n;i++){ sum+=i;}T(n) = ntotal = (1+n)*n/2;T(n) = 1算法时间复杂度...

2019-10-20 11:14:54 596

原创 哈希表

待完成

2019-10-20 11:13:34 119

原创 排序(堆排序)

堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它是不稳定排序(相同的两个值排序后的先后顺序可能发生变化)。堆是具有以下性质的完全二叉树每个结点的值都大于或等于其左右孩子结点的值,称为 大顶堆 ,如图1。 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。每个结点的值都小于或等于其左右孩子结...

2019-10-20 11:11:35 81

原创 线索二叉树

图1先上一张图,如图1。我们可以发现二叉树中指针域并不是被充分利用了,有很多的 ^ ,也就是空指针域的存在。对于一个有 n 个节点的二叉树,每个节点有左右孩子两个指针域,所以一共有 2n 个指针域。而 n 个节点的二叉树有 n - 1 条连线,所以存在 2n - ( n - 1 ) = n + 1 个空指针域。如图1所示的二叉树一共有10个节点,所以一共一11个空指针域。这意味着空间的浪费...

2019-10-20 11:00:37 347

原创 二叉树(重要)

二叉树的概念树有很多种,而二叉树就是每个节点的度最多为2的树。说通俗一点,就是每个节点最多最多只能有两个子节点的树。图1:图中的三棵树都是二叉树图2:图中这棵树就不是二叉树,因为有节点的度为3,大于了2二叉树的特点每个节点最多有两棵子树,所以二叉树中不存在度大于2的节点。子节点有左右之分,左子节点衍生的树是左子树,右子节点衍生的树叫右子树。左子树和右子树是有顺序的,次序不...

2019-10-20 10:53:08 318

原创 树基本介绍

树是什么和数组、链表一样,树也是一种数据结构,只是数据的组织形式不同而已,看下面的示意图。图1:数组内存示意图图2:链表内存示意图图3:树内存示意图较官方的定义:树(Tree)是n(n>=0)个节点的有限集。n=0时称为空树。在任意一颗非空树中:(1)有且只有一个称为根(Root)的节点;(2)当n>1时,其余节点可分为m(m>0)个互不相交的优先级T1、T2、T...

2019-10-14 22:50:27 839

原创 查找(二分查找)

二分查找(BinarySearch)基本思想参与二分查找的数据必须是有序的,不然没法进行。假设要查找的数为key。先找到查找的数据的中间值midValue,用key和中间值比较,如果key==midValue,就返回整个中间值的小标;如果不相等,分两种情况:①key<midVlaue,就继续递归查找midValue左边的数据 ②key>midVlaue,就继续递归查找midValu...

2019-10-14 22:50:05 100

原创 排序(基数排序)

基数排序(radix sort)基本介绍(直接略过吧!!)基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法。基数排序(Radix Sort)...

2019-10-14 22:49:53 169

原创 排序(归并排序)

#####归并排序(MERGE-SORT)基本思想归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。这样说可能也不好理解,那这里看一个归并排序的排序过程。归并排序如上图,先将要排序的数据分为两...

2019-10-14 22:49:36 110

原创 排序(快速排序)

快速排序(Quicksort)基本思想快速排序是对冒泡排序的一种改进。先选定一个基准,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都的所有数据都比基准要小,在基准左边;另一部分的数据都比基准大,在基准右边。然后再按此方法对基准两边的两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序过程代码实现/** * @author...

2019-10-14 22:49:20 139

原创 排序(希尔排序)

希尔排序介绍希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序。希尔排序基本思想希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。下面结合一组数据描述希尔...

2019-10-14 22:49:01 124

原创 排序(插入排序)

插入排序(Insertion Sorting)的基本思想把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。说通俗一点,如果你玩过斗地主(扑克),那么你理牌的过程就是插入排序。发给你的牌是一个无序表(设为...

2019-10-14 22:48:44 102

原创 排序(选择排序)

选择排序(Select Sorting)的基本思想第一次从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-...

2019-10-14 22:48:31 78

原创 排序(冒泡排序)

冒泡排序(Bubble Sorting)的基本思想:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒,每次冒泡完就会将参与这次冒泡的元素中的最大值或最小值排到最后。举个栗子:对9 5 2 10 0从小到大排序第一趟:比较了4次9 5 2 10 09 5 ……9>5...

2019-10-14 22:48:08 96 1

原创 排序

什么是排序?排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序分类内部排序指将需要处理的所有数据都加载到内部存储器中进行排序。外部排序数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。常见排序算法分类...

2019-10-14 22:47:54 82

原创 递归

递归是什么?说白了,递归就是不断调用自身一个过程。上代码最好说!public static int factorial(int n) { // 终止条件 if (n == 1) { return 1; } // 调用自己,处理子问题factorial(n-1) return facto...

2019-10-14 22:47:31 215

原创 栈应用—前缀、中缀、后缀表达式

####中缀表达式我们平时所见的表达式都是中缀表达式,如( 3 + 4 )x 5 - 6 、1 + 2 * 4 + 6 / 2中缀表达式的求值是我们人最熟悉的,但是对计算机来说却不好操作(前面我们讲的案例就能看的这个问题),因此,在计算结果时,往往会将中缀表达式转成其它表达式来操作(一般转成后缀表达式)####前缀表达式前缀表达式也叫做波兰表达式前缀表达式的运算符位于操作数...

2019-10-14 22:47:12 231

原创 栈应用—使用栈实现计算器

问题描述:给出一个表达式,如“3+25-6/3-10”,计算出该表达式的值。思路分析:1、创建两个栈,一个是存放参与运算的数字的栈numStack,一个是存放运算符的栈operStack2、扫描表达式3、如果扫描到的字符是数字,直接踏入numStack4、如果扫描到的字符是运算符,设为a4.1、如果此时operStack为空,直接将符号压入operStack4.2、如果此时ope...

2019-10-13 17:55:21 578

原创

栈简介栈的英文为(stack)。栈是一个**先入后出(FILO-First In Last Out)**的有序列表。栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素刚好相反,...

2019-10-13 17:43:45 177

原创 单向环形链表——约瑟夫问题求解

单向环形链表应用场景Josephu(约瑟夫、约瑟夫环) 问题Josephu 问题为:设编号为1,2,… n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m 的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。思路:用循环链表来处理Josephu 问题:先构成一个有n个结点的单循环链表...

2019-10-13 17:40:13 203

原创 双向链表

在上一篇:单向链表中,可以发现单向链表有一些缺点单向链表,查找的方向只能是一个方向,只能从前向后查找单向链表不能自我删除,需要先找到被删除节点的前一个节点front,使用front节点来辅助删除,不方便双向链表就能够解决这些问题如图1,双向链表包括两个指针域,previous(简写prev)、next图1.双向链表的节点因为双向链表有两个指针域,所以内存结构如图2图2....

2019-10-13 17:37:36 146

原创 单链表面试题

1.求单链表中有效节点的个数从头结点从头到尾遍历计数即可2.查找单链表的倒数第k个节点(新浪面试题)先从头遍历得到链表总的节点个数size从头节点开始遍历(size-k)次得到该节点如果没有返回null3.单链表的反转(腾讯面试题)定义一个新的头结点newHead,从头节点head遍历链表,每遍历一个节点删除并保存这个节点,然后将此节点插入到newHead的后面。 pu...

2019-10-13 17:25:51 76

原创 单向链表

链表(LinkedList)简介链表是以节点的方式来存储数据,是链式存储,如图1图2。图1.链表的一个节点图2.一个链表,带头结点每个节点包含 数据域(data); 指针域(next):指向下一个节点的地址。如图2,链表在内存的空间并不是连续的,每个节点通过指针域来指向下一个节点,而数组在内存中一个连续的区域。因为链表的这个特点,只要还有内存可以分配,那么链表就可以无限延长,而数...

2019-10-13 17:24:49 184

原创 环形队列

可以先参考上一篇为什么会有环形队列上一篇:队列思路约定front指向队列的第一个元素,也就是说data[front]就是队头数据,front初始值为0。约定rear指向队列的最后一个元素的后一个位置,也就是说data[rear-1]就是队尾数据,rear初始值为0。队列满的条件是:***( rear+1 )% maxSize == front***队列空的条件是:rear == ...

2019-10-13 14:17:10 5195 2

原创 队列

队列简介队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出使用场景:如银行叫号排队,当窗口都有人时,后面的人就是一个队列,窗口从队列中叫一个。数组实现队列队列本身是有序列表,若使用数组的结构来存储队列的数据,则队列数组的声明如下图, 其中 maxSize 是该队列的最大容量。因为队列的输出、输入是分别从前后端来处理,...

2019-10-13 14:16:47 210

原创 稀疏数组

####基本介绍当一个二维数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模二维数组与稀疏数组的转换如下图1图1二维数组与稀疏数组转换/** @author chenzhiyuan @create 2019-07-...

2019-10-13 14:16:31 391 4

原创 数据结构与算法简介

数据结构与算法的关系数据结构(data structure)是一门研究组织数据的方式的学科,有了编程语言就有了数据结构。学好数据结构可以编写出更加漂亮高效的代码。程序 = 数据结构 + 算法数据结构是算法的基础,想要学好算法,必须学好数据结构。数据结构数据结构包括线性结构和非线性结构线性结构线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关系线性结构有两种...

2019-10-13 14:16:00 98

原创 稀疏数组

基本介绍当一个二维数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模如下图二维数组与稀疏数组的转换图示二维数组与稀疏数组转换(java)/** @author 陈治远 @create...

2019-07-24 22:48:21 251

原创 数据结构与算法简介

数据结构与算法的关系数据结构(data structure)是一门研究组织数据的方式的学科,有了编程语言就有了数据结构。学好数据结构可以编写出更加漂亮高效的代码。程序 = 数据结构 + 算法数据结构是算法的基础,想要学好算法,必须学好数据结构。数据结构数据结构包括线性结构和非线性结构线性结构线性结构作为最常用的数据结构,其特点是数据元素之间存在一对一的线性关...

2019-07-24 22:48:01 92

原创 RabbitMQ相关概念(重要)

基本概念消息(message): 消息就是指在应用与应用之间传输的数据。消息可以很简单,比如一个字符串;消息也可以很复杂,比如一个对象。消息包括消息体(即实际数据)和路由键(可以理解成标签),后面会 一 一 介绍。生产者(producer):发送消息的程序。消费者(consumer):接收并处理消息的程序。服务节点(Broker):也就是RabbitMQ服务器。...

2019-07-23 18:45:08 133

原创 windows下安装RabbitMQ

先下载RabbitMQ和Erlang百度云连接:链接:https://pan.baidu.com/s/1fDdPudpra1ckHn70E1pRqg 提取码:38pa也可以参考下面内容自己下载1. 下载RabbitMQ下载RabbitMQ选择windows版下载最新版3.7.162. 下载Erlang下载Erlang因为RabbitM...

2019-07-19 14:06:13 114

原创 RabbitMQ简介及安装

RabbitMQ介绍摘抄于《RabbitMQ实战指南》,觉得啰嗦直接跳过RabbitMQ 是采用Erlang 语言实现AMQP (Advanced Message Queuing Protocol ,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。在此之前,有一些消息中间件的商业实现,比如微软的MSMQ( MicroSoft Mess...

2019-07-18 23:49:02 53

java api文档 1.6中文版 1.7 1.8中文版 javaee1.5

java api文档 包括java se的1.6 1.7 1.8api 其中1.6和1.8为中文版 还包括javaee1.5api文档

2018-04-09

java入门-实现的贪吃蛇小游戏

用java实现的贪吃蛇,已经实现主要的功能,代码写了注释,大家可以看注释来理解,还有些功能没有实现,比如死了后重新开始,死了后绘制gameover,大家可以自己添加

2018-04-05

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除