- 博客(27)
- 问答 (1)
- 收藏
- 关注
原创 二叉排序树的有关知识
什么是二叉排序树?二叉排序树就是给一个根节点,在根节点右边的节点的值比它大,在根节点左边的值比他小。一棵空树,或者是具有下列性质的二叉树:(1)若左子树不空,则左子树上所有结点的值均小于它的根结点的值;(2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;(3)左、右子树也分别为二叉排序树;代码实现: public static void main(String[] args) { int[] arr={7,3,10,12,5,1,9,2};
2022-02-13 17:22:22
525
原创 有关二叉树的遍历,查找,删除操作
什么是二叉树?二叉树树主要分为根节点(root),左子节点(left),右子节点(right)。每个节点有包含自己对应的信息(年龄,姓名,左右节点等等)二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个结点最多只能有两棵子树,且有左右之分。二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及...
2022-02-12 16:48:20
346
原创 哈希表初理解
什么是哈希表?哈希表(Hash Table)也叫做散列表,是一种数据结构。它通过把关键码值映射到表中一个位置来访问记录,以加快查找速度(相当于一个缓存)。这个映射函数叫做散列函数,存放记录的数组叫做散列表我们通过在哈希表中创建private EmpLinkedList[] empLinkedListArray;来创建多个链表,每个链表都有首节点,通过散列函数指向下一个节点代码实现思路:首先我们先创建一个EmpNode类(相当于个人信息类),里面存放我们每个节点的信息。/..
2022-02-10 15:55:39
404
原创 插值查找算法
差值查找算法与二分查找算法类似,主要就是mid的值不是(left=right)/2,而是mid=low+(high-low)*(key-arr[low])/(arr[high]-arr[low]);其中有两点不同:1,int mid=low+ (right-left) * (findVal-arr[left]) / (arr[right] - arr[left])2,由于mid公式里面自适应加入了findVal,所以我们前面要加判断findVal<arr[left]和findVal&g
2022-02-05 15:26:50
471
原创 线性查找和二分查找
线性查找:线性查找是最简单的对数组进行遍历的查找方法。查找一个符合条件的数,代码如下: public static int linear2(int[] arr,int findVal){ for (int i = 0; i <arr.length ; i++) { if (arr[i]==findVal){ return i; } } return -1
2022-02-05 14:05:23
291
原创 基数排序算法
什么是基数排序?1,基数排序是对传统桶排序的扩展,速度很快2,基数排序是经典的空间换时间的方法,占用内存很大,当要排列的数据很大时,容易造成OutOfMemoryError内存不足错误3,基数排序是稳定排序,什么是稳定的?假如有一个数组{7,3,4,4,6,5},我们使用稳定排序从小到大后变成{3,4,4,5,6,7},就红色的4在前面排序完成后还在前面4,基数排序不支持负数排序基数排序代码思路:1,将所有带比较的数统一为同样长度,数位较短的数前面补零2,然后从最低位开始,一次进
2022-02-04 16:49:38
698
原创 归并排序(分治思想)
什么是分治?分治法将问题分成一些小的问题然后递归求解,治就是一个合的思想。分治_百度百科归并排序代码思路:分其实就是把一个数组从中间分成两个数组,左数组和右数组,分界点为mid=left+right/2,然后递归,最后得到上图所示蓝色字体的最后一行一个个单独的数组治(合并)就是要求两个分好的数组进行按照一定规则的排序,这时我们使用三个指针来完成其操作,第一个left(i)指针是指向左数组的首节点,第二个指针mid+1(j)指向右数组的首节点,第三个指针temp[0](t)指向新建数组
2022-02-03 15:23:26
662
原创 快速排序算法
快速排序是什么?快速排序算法通过多次比较和交换来实现排序,其排序流程如下(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。(4)重复上述...
2022-01-28 16:42:24
623
原创 希尔排序算法
什么是希尔排序?希尔排序是希尔提出的一种排序算法,希尔排序也是一种插入排序,它是简单插入排序经过改进后的一个更高效的版本,也称为缩小增量排序。希尔排序按照增量将数组进行分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,没组包含的关键词越来越多,当增量减至1时,整个文件被分成一组,算法便终止希尔排序_百度百科希尔排序代码思想:假设有一个数组arr[],里面有十个元素第一次: gap=arr.length/2=5,将数组分为五组,每个数组元素的索引相差5(步长为5),然后每组进行排
2022-01-27 17:38:08
612
原创 插入排序算法
什么是插入排序?*插入排序的基本思想就是:把n个待排序的元素看成一个有序表和一个无序表。*开始的时候有序表中有1个元素,无须表中包含n-1个元素,排序过程中每次从无需表中取出第一个元素,然后把它与有序表中的元素进行比较,将它插入到有序表中的适当的位置,成为新的有序表。代码思路:1,假设有一个指针(index),指向无序数组中的第一个元素,即arr[index]是无序数组中的第一个元素,我们定义一个变量来存储该值:int insetVal=arr[index],现在要将其插入到前面的有序数
2022-01-27 15:44:20
997
原创 排序(排序算法)
什么是排序算法?排序也称为排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。所谓排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。这种新序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于筛选和计算,大大提高了计算效率。对于排序,我们首先要求其具有一定的稳定性,即当两个相同的元素同时出现于某个序列之中,则经过一定的排序算法之后,两者在排序前后的相对位置不发生变化。换言之,即便是两个完全相同的元素,它们在排序过程中也是各有区别的,
2022-01-23 13:52:07
353
原创 回溯之八皇后问题
1,什么是回溯?回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已经不满足求解条件时,就"回溯"返回,尝试别的路径。(走不通就退回去再走的技术)第一个皇后摆在第一行第一列,然后开始试探,第二个皇后摆在哪里,才不会和第一个皇后冲突,第三个皇后摆在哪里,才不会和第二个皇后冲突。。。如果遇到冲突,则把当前正在放置的皇后往后挪一格,如果 8 列都不行,那么就回溯至上一级皇后,让它试着挪一挪回溯算法_百度百科2.八皇后问题是什么?八皇后问题就是:在 8× 8
2022-01-22 16:33:48
360
原创 递归与迷宫问题
1,什么是递归?递归通俗来讲就是一个方法自己调用自己,每次调用的时候传入不同的变量递归(编程技巧)_百度百科2,递归需要遵循的原则1,执行一个方法时,就创建一个新的受保护的独立栈空间(一个线程有自己独立的一个栈空间,每个方法调用对应一个栈帧)2,方法的局部变量是独立的,不会相互影响,比如n变量3,如果方法中使用的是引用类型的变量(比如数组map[][]),就会共享该引用类型的数据4,递归必须向退出递归的条件逼近,否则就是无限递归,出现StackOverflowError.栈溢出问
2022-01-21 16:38:53
503
原创 单链表的有关知识以及增删改查
1,单链表是一种线性数据结构,但是它不一定是连续的,是一种链式存储结构(如下图)单链表的每个节点分为data域(值域)和next域(指向下一个节点)单链表分为有头节点和没有头节点,有头结点,头结点只有next域而没有data域2,单链表的应用场景:举例水浒英雄排行榜(尚硅谷官方讲解):定义:no:英雄编号name:英雄名称nikeName:英雄昵称next:指向下一个英雄节点特别注意:插入的时候判断的条件是新插入节点的编号与temp.next.no做比较,即tem
2022-01-13 19:55:55
145
原创 数组模拟队列以及模拟环形队列的实现
队列是一种先进先出的有序列表,可以用数组或者链表来实现(例如:银行排队系统)前提条件:maxSize :队列容量(数组的长度)arr :模拟队列的数组front :指向队列头部元素的前一个元素,初始值为 -1rear :指向队列尾部元素,初始值为 -1首先判断:队列判空:front == rear队列判满:rear == (maxSize - 1) ,即 rear 是否已经指向了数组的最后一个位置队列元素个数:rear - front队列入队:队列不满才能入队,arr[++
2022-01-09 22:23:23
535
原创 稀疏数组有关知识
稀疏数组就是让数组只存储一些有用的值,比如棋盘游戏的存档,我们只需要存储我们下过的棋子的位置即可,不必存储整个棋盘的内容,这个时候我们便可以使用稀疏数组,例如:二维数组转稀疏数组的思路:1,首先遍历二维数组,得到二维数组有多少个有效值个数sum2,根据sum就可以创建稀疏数组sparseArr=int[sum+1][3](这个3是固定的,代表行、列、值)3,将二维数组存储到稀疏数组中4,将稀疏数组存储到文件中稀疏数组转二维数组主的思路:1,首先从文件中读取稀疏数组2,然后
2022-01-07 16:56:58
290
原创 数据结构之线性结构与非线性结构
数据结构包括两大类:线性结构和非线性结构线性结构:其中线性结构是数据元素之间有着一对一的对应关系,分为顺序储存结构和链式存储结构,顺序储存结构顾名思义是按照一定的顺序排列的(地址连续),而链式存储结构可以按照不同的方式进行排列(地址可能不连续),顺序储存的线性表叫做顺序表,链式存储的线性表叫做链表,其中通过指针可以指向下一个节点常见的顺序结构有:数组,队列,链表和栈非线性结构:非线性结构包括:图结构,树结构,二维数组,广义表,多维数组...
2022-01-06 20:37:25
1312
原创 关于idea中bootStrap的使用
1,首先我们在官网上下载bootStraphttps://v3.bootcss.com/getting-started/#download下载第一第二个都行,第二个可以查看源码2,我们下载完以后选择dist文件夹3,然后在idea中把该文夹复制到web文件中4,在spring-mvc中配置 <!-- 配置映射静态资源css --> <mvc:resources mapping="bootstrap/css/*" location="boot...
2021-11-16 17:15:20
3981
原创 Mapper.xml配置文件问题(又是找BUG)
今天又遇到了java.lang.ExceptionInInitializerError这个问题,因为以前遇到过,所以习惯性的找pom配置文件,然后发现没有错有,又看mybats.xml配置文件中写mapper文件的路径什么的,来来回回地该,文件来来回回地放位置,发现如轮如何还是这个错误于是我又创建了一个新的配置文件名为aa.xml然后里面什么都没写,我开始用测试类调试,发现可以获取到这个文件我发现是mapper.xml文件出现了错误<?xml version="1....
2021-11-03 17:00:32
357
原创 IDEA中lombok插件的下载与使用
1,lembok插件的下载地址与idea添加lombok插件方法lombok插件的下载地址:https://github.com/mplushnikov/lombok-intellij-plugin/releases下载完成后点击idea中的File再点击settings再点击Plugins然后再点击右边的Install Plugin fromDisk最后找到你下载的lombok插件即可最后重启idea,查看plugin里面显示lombok表示插件可以...
2021-11-02 21:45:14
12650
1
原创 关于mybatis中properties文件运行不出来的问题(找错误找了一个小时)
我们在resource下一般写.properties文件但是我在mybatis-config.xml文件用时候一直报Couldnotfindresourcedb.properties错误,找的我怀疑人生......,我点开target文件中的classes文件并没有找到db.properties文件,发现根本没有加载进去.最后找到两个解决方法:1,我们直接把db.properties文件复制到classes文件下面,单间粗暴,但是这样的话太麻烦,下次用还是得这样.(不推荐)2,...
2021-10-30 19:23:48
2500
1
原创 一个简单的AOP实例
上一篇谢了动态代理,这篇写spring中的一个重要特征AOP,来进行spring的面向切面编程.首先配置pom.xml文件 <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId>
2021-10-30 11:02:52
396
原创 动态代理之模板
动态代理相比于静态代理,就是不用手动写代理类了,减少了代码的重复,调高了效率,且静态代理的好处动态代理基本全有。1,首先创建一个接口,这个接口可以理解为抽象的事务,比如常用的UserService接口,里面定义一些基本的方法public interface UserService { //原始的接口 public void add(); public void delete(); public void update(); public void query();}2,
2021-10-29 21:54:28
129
原创 第一个MaBatis程序
1,首先创建一个数据库和一个表2,创建一个maven父工程,删掉里面的src文件在pom.xml文件中添加dependencies> <!-- https://mvnrepository.com/artifact/junit/junit --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId&g...
2021-10-27 21:15:40
73
空空如也
关于创建对象的一个问题
2021-10-21
TA创建的收藏夹 TA关注的收藏夹
TA关注的人