自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(57)
  • 收藏
  • 关注

原创 KMP算法

KMP算法我只是一个无情的搬运工(别人真的已经讲得很好了),为了防止我遗忘,特地记下来。算法参考链接下面这两个链接对我理解这个算法起到了很大的帮助:https://www.bilibili.com/video/BV16X4y137qw?from=search&seid=9122683562533868859&spm_id_from=333.337.0.0https://www.bilibili.com/video/BV1jb411V78H?from=search&sei

2021-12-19 19:27:39 277

原创 Lambda表达式

Lambda表达式本篇博客是学习过程的学习笔记Lambda常用抽象接口 * java8 内置的四大核心函数式接口 * * Consumer<T>:消费型接口 * void accept(T t); * * Supplier<T>:供给型接口 * T get(); * * Function<T, R>:函数型接口 * R apply(T

2021-10-25 19:17:57 278

原创 Gateway集成knife4j多模块分组踩坑

Gateway集成knife4j多模块分组踩坑学习、踩坑、不断前进,记录一下pom.xml其他子模块<dependency> <groupId>com.github.xiaoymin</groupId> <artifactId>knife4j-micro-spring-boot-starter</artifactId> <version>2.0.9</version></depen

2021-08-02 11:57:15 6633

原创 序列化导致输出结果异常

序列化导致的输出结果异常文章内容为平时学习所记,如有不正确和冒犯之处,还请指教。问题描述:RestController返回的json数据中包含了重复的返回数据,如下问题分析:返回的结果中,map部分显然是自定义的,而且一旦返回结果改动,map部分数据也会跟着改动 ====》 代码是我们自定义的;查找系统中配置的过滤器等是否重复返回了数据。====》经查,除了Controller中调用过该返回类以外,其余地方都未调用;@PostMapping("/sms")public Co

2021-07-15 17:05:04 184

原创 Docker(小白刚进门)

Docker(小白刚进门)本文仅对所学知识所做的笔记,如果能给你带来帮助,我也会感到非常幸运Docker简介什么是容器?一种虚拟化的方案操作系统级别的虚拟化只能运行相同或相似内核的操作系统依赖于Linux内核特性:Namespaces和Cgroups(Control Group)什么是Docker?将应用程序自动部署到容器Go语言开源引擎 Github地址:https://github.com/docker/dockerDocker的目标提供简单轻量的建模方式职责的

2021-01-07 21:36:16 310

原创 设计模式-代理模式

设计模式-代理模式本文仅对设计模式学习的查缺补漏静态代理例子/** * 静态代理举例 * * 特点:代理类和被代理类在编译期间,就确定下来了 * * @Author: fxx * @Date: 2020/12/30 15:04 */interface ClothFactory{ public void produceClothes();}/** * 被代理类 */class NikeClothFactory implements ClothFactory{

2020-12-30 16:55:40 166

原创 Java基础复习-反射

Java基础复习-反射本文仅对所学java知识的查缺补漏简述Reflection(反射):反射机制允许程序在执行期借助于Reflection API取得任何类的内部信息,并能直接操作任意对象的内部属性及方法;加载完类之后,在堆内存的方法区中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象看到类的结构。这个对象就像一面镜子,透过这个镜子看到类的结构,所以,我们形象地称之为:反射。正常方式:引入需要的包类名称通过n

2020-12-30 14:47:17 230

原创 Java基础复习-IO流

Java基础复习-IO流本文仅对所学java知识的查缺补漏FileFile类的使用1.File类的一个对象,代表一个文件或一个文件目录(俗称:文件夹)2.File类声明在java.io包下3.路径分隔符与操作系统: window和DOS系统默认使用 \ 表示 UNIX和URL使用 / 表示4.Java程序支持跨平台运行,因此路径分隔符要慎用5.为了解决这个隐患,File类提供了一个常量: public static final String separato

2020-12-29 13:28:55 312

原创 Java基础复习-泛型

Java基础复习-泛型本文仅对java学习过程的查缺补漏使用泛型略自定义泛型可以自定义泛型类、接口;方法泛型类可能有多个参数,此时应将多个参数一起放在尖括号内,比如:<T,E,V>泛型类的构造器如下:public GenericClass(){};而不是下面这种:public GenericClass<E>(){}实例化后,操作原来泛型位置的结构必须与指定的泛型类型一致泛型不同的引用不能相互赋值尽管在编译时,ArrayList<St

2020-12-28 09:59:16 223

原创 Java基础复习-集合

Java基础复习-集合本文仅对java学习知识的查缺补漏集合框架概述集合、数组都是对多个数据进行存储操作的结构,简称Java容器。(这里讲的存储都指的是对内存的操作)数组在存储多个数据方面的特点:一旦初始化以后,长度就确定了,长度不可修改;数组一旦定义好后,其元素的类型也就确定了。比如:String[] arr; int[] arr1;;数组中提供的方法非常有限,对于添加、删除、插入数据等操作,非常不便。数组存储数据的特点:有序、可重复;对于无序、不可重复的需求,不能满足。J

2020-12-27 14:21:06 172

原创 Java基础复习-枚举与注解

Java基础复习-枚举与注解本文仅对所学java知识的查缺补漏枚举类的对象只有有限个,确定的。例子1:自定义枚举类/** * 一、枚举类的使用: * 1.枚举类的理解:类的对象是有限个,确定的。 * 2.当需要定义一组常量时,强烈建议使用枚举类。 * 3.如果枚举类中只有一个对象,则可以作为单例模式的实现方式。 * * *二、如何定义枚举类 * 1.jdk5.0之前,自定义枚举类 * 2.jdk5.0之后,使用enum关键字定义枚举类 * * @Author: fxx

2020-12-24 23:02:37 150

原创 Java基础复习-常用类

Java基础复习-常用类本文仅对学习过程中所缺java知识点的查缺补漏复习String代表字符串。Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现。String是一个final类,代表不可变的字符序列;字符串是常量,用双引号引起来表示。它们的值在创建之后不能更改;String对象的字符内容是存储在一个字符数组value[]中的。字符串常量存储在字符串常量池,目的是共享;字符串非常量对象存储在堆中;例子1/** * @Author: fxx * @Date:

2020-12-24 14:41:29 242

原创 Java基础复习-多线程

Java基础复习-多线程本文仅对学习过程中所缺java知识点的查缺补漏复习多线程程序(program):为了完成特定任务,用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象;进程(process):程序的一次执行过程,或是正在运行的一个程序。是一个动态的过程:有自身的产生、存在和消亡的过程-生命周期;程序是静态的,进程是动态的;进程作为资源分配的单位,系统在运行时会为每个进程分配不同的内存区域;线程(thread):进程可以进一步细化为线程,是一个程序内部的一条执行路径。

2020-12-22 21:10:29 210

原创 Java基础复习一

Java基础复习-1本文仅对学习过程中所缺java知识点的查缺补漏复习合法标识符规则由26个英文字母大小写,0-9,_或$组成数字不可以开头不可以使用关键字和保留字,但能包含关键字和保留字Java中严格区分大小写,长度无限制标识符不能包含空格Java中名称命名规范包名:多单词组成时所有字母都小写:xxxyyyzzz类名、接口名:多单词组成时,所有单词的首字母大写:XxxYyyZzz常量名、方法名:多单词组成时,第一个单词首字母小写,第二个单词开始每个单词首字母大写:xxxYy

2020-12-19 09:51:05 349 1

原创 不会还有人不知道Java中 equal 和 == 的区别吧

Java中 equal 和 == 的区别在学C和C++语言的时候,用来比较的运算符就是==,而在Java中,如果依然使用==来比较,就不行,比如:public class Test1 { public static void main(String[] args){ String str1 = "Hello World"; String str2 = new String("Hello World"); String str3 = str2;

2020-12-12 21:49:57 158

原创 八大常用排序简单总结

八大常用排序简单总结假设含有n个记录的序列为{r1,r2,…,rn},其相应的关键字分别为{k1,k2,…,kn},需确定1,2,…,n的一种排列p1,p2,…,pn,使其相应的关键字满足kp1<=kp2<=…<=kpn(非递减或非递增)关系,即使得序列成为一个按关键字有序的序列(rp1,rp2,…,rpn),这样的操作称为排序。下面分类给出了各大算法的详细描述和实现的链接。排序的稳定性假设ki=kj(1<=i<=n,1<=j<=n,i≠j),且在排序前

2020-12-02 14:16:26 269

原创 快速排序(C语言简单实现)

快速排序(C语言简单实现)快速排序(Quick Sort)是冒泡排序的升级版。基本思想:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。对快速排序过程的理解:https://www.runoob.com/w3cnote/quick-sort.html/* 对顺序表L作快速排序 */void QuickSort(SqList *L){ QSort(L, 1, L->length);}

2020-12-02 14:07:06 1196

原创 堆排序(C语言简单实现)

堆排序(C语言简单实现)堆排序是对简单选择排序的升级版,简单选择排序链接。堆是具有下列性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。堆排序算法堆排序(Heap Sort)就是利用堆进行排序的方法 。基本思想:将待排序的序列构造成一个大顶堆。此时,整个序列的最大值就是堆顶的根结点。将它移走(其实就是将其与堆数组的末尾元素交换,此时末尾元素就是最大值),然后将剩余的剩余的n-1个序列重新构造成一个堆,这样就会得到n

2020-11-30 17:44:11 4495

原创 希尔排序(C语言简单实现)

希尔排序(C语言简单实现)希尔排序是直接插入排序的升级版,直接插入排序每次增量是1,但希尔排序的增量increment比1大,也就是说直接插入排序是一个一个比较的,但是希尔排序是跳着来的,从而实现顺序表的基本有序,如果对直接插入排序不了解的可以看下我的另一篇文章:直接插入排序,看懂了直接插入排序再回来看希尔排序就很简单了。/* 顺序表L作希尔排序 */void ShellSort(SqList *L){ int i, j; int increment = L->length; do{

2020-11-29 17:32:40 2838

原创 归并排序(C语言简单实现)

归并排序(C语言简单实现)归并排序(Merging Sort)利用的就是归并的思想实现的排序方法。原理是:假设初始序列含有n个记录,则可以看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序子序列;再两两归并,如此重复,直到得到一个长度为n的有序序列为止,这种排序方法称为2路归并排序 。递归每次都将序列分一半,比如一个数组有18个数,那么第一次分出1-9和10-18,然后分别对两组继续分半,直到最后剩下一个元素时,即分好了组(此时全都是最小的组,只含一个元

2020-11-29 16:31:49 7801

原创 直接插入排序(C语言简单实现)

直接插入排序(C语言简单实现)本文参考自《大话数据结构》直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录新增1的有序表。/* 对顺序表L作直接插入排序 */void InsertSort(SqList *L){ int i, j; for(i=2;i<=L->length;i++){ if(L->r[i] < L->r[i-1]){ //需将L->r[i]插入有序子

2020-11-25 13:39:39 2408

原创 散列表/哈希表(C语言简单实现)

散列表/哈希表(C语言简单实现)本文参考自《大话数据结构》定义通过某个函数f计算出记录的存储位置,而不需要通过比较,这就是一种新的存储技术——散列技术。散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key) 。在查找时,根据这个确定的对应关系找到给定值key的映射f(key),若查找集合中存在这个记录,则必定在f(key)的位置上。我们把这种对应关系f称为散列函数,又称为哈希函数。按照这个思路,采用散列技术将记录存储在一块连续的存储

2020-11-24 15:48:37 5272 5

原创 平衡二叉树(C语言简单实现)

平衡二叉树(C语言简单实现)本文参考自《大话数据结构》平衡二叉树是一种二叉排序树,其中每一个结点的左子树和右子树的高度差至多等于1 。将二叉树上结点的左子树深度减去右子树深度的值称为平衡因子BF(Balance Factor)。平衡二叉树首先必须是一棵二叉排序树,同时任一结点的左子树和右子树的高度差最多等于1 。距离插入结点最近的,且平衡因子的绝对值大于1的结点为根的子树,我们称为最小不平衡子树 。平衡二叉树实现原理平衡二叉树构建的基本思想就是在构建二叉排序树的过程中,每当插入一个结点时,

2020-11-24 10:46:49 3844 9

原创 二叉排序树(C语言简单实现)

二叉排序树(C语言简单实现)本文参考自《大话数据结构》如果查找的数据集是有序线性表,并且是顺序存储的,查找可以用折半、插值、斐波那契等查找算法来实现,可惜,因为有序,在插入和删除操作上,就需要耗费大量的时间。二叉排序树(Binary Sort Tree),又称为二叉查找树。它或者是一棵空树,或者是具有下列性质的二叉树。若它的左子树不空,则左子树上所有结点的值均小于它的根结构的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树;构造一棵二叉

2020-11-22 14:32:25 3332

原创 线性索引查找

线性索引查找本文参考自《大话数据结构》数据结构的最终目的是提高数据的处理速度,索引就是为了加快查找速度而设计得一种数据结构。索引就是把一个关键字与它对应的记录相关联的过程 。索引按结构可以分为线性索引、树形索引和多级索引。我们这里只介绍线性索引。所谓线性索引就是将索引项集合组织为线性结构,也称为索引表 。重点介绍三种线性索引:稠密索引、分块索引和倒排索引。稠密索引稠密索引是指在线性索引中,将数据集中的每个记录对应一个索引项,对于稠密索引这个索引表来说,索引项一定是按照关键码有序的排列 。如

2020-11-21 10:57:01 331

原创 查找(顺序、折半、插值、斐波那契)

查找(顺序、折半、插值、斐波那契)本文参考自《大话数据结构》​ 查找就是根据给定的某个值,在查找表中确定一个其关键字等于给定值得数据元素(或记录)顺序查找/* 顺序查找,a为数组,n为要查找的数组个数,key为要查找的关键字 */int Sequential_Search(int* a, int n, int key){ int i; for(i=1;i<=n;i++){ if(a[i] == key) return i; } return 0;}顺序查找优化

2020-11-20 17:41:22 216

原创 关键路径(C语言简单实现)

关键路径本文参考自《大话数据结构》,对关键路径的理解参考自:https://www.jianshu.com/p/1857ed4d8128在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,用边上的权值表示活动的持续时间,这种有向图的边表示活动的网,我们称之为AOE网 。我们把AOE网中没有入边的顶点称为始点或源点,没有出边的顶点称为终点或汇点。尽管AOE网和AOV网都是用来对工程建模的,但它们还是有很大的不同,主要体现在AOV网是顶点表示活动的网,只描述活动之间的制约关系,而AOE网是

2020-11-20 14:54:24 5497 3

原创 拓扑排序(C语言简单实现)

拓扑排序本文参考自《大话数据结构》AOV定义在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网,我们称为AOV网(Activity On Vertex Network)。AOV网中的弧表示活动之间存在的某种制约关系。不可以存在环路设G=(V,E)是一个具有n个顶点的有向图,V中的顶点序列v1,v2,...,vn,满足若从顶点vi到vj有一条路径,则在顶点序列中顶点vi必在顶点vj之前。则我们称这样的顶点序列为一个拓扑序列。所谓拓扑排序,就是对一

2020-11-19 17:40:53 5157 6

原创 最短路径-迪杰斯特拉(C语言简单实现)

最短路径(C语言简单实现)本文参考自《大话数据结构》,网上有很多关于迪杰斯特拉和弗洛伊德算法的描述和图解,大家都可以去看看,这里就不赘述,只是对迪杰斯特拉算法做简单实现。在网图和非网图中,最短路径的含义是不同的。由于非网图它没有边上的权值,所谓的最短路径,其实就是指两顶点之间经过的边数最少的路径;而对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点是源点,最后一个顶点是终点 。迪杰斯特拉(Dijkstra)算法这个算法的思路就是:求整个图的最短路径(

2020-11-19 12:40:45 2999 5

原创 最小生成树(C语言简单实现)

最小生成树本文参考自《大话数据结构》一个连通图的生成树是一个极小的连通子图,它含有图中全部的顶点,但只有足以构成一棵树的n-1条边。我们把构造连通网的最小代价生成树称为最小生成树 。找连通网的最小生成树,经典的有两种算法:普里姆算法和克鲁斯卡尔算法。普里姆(Prim)算法/* Prim算法生成最小生成树 */void MiniSpanTree_Prim(MGraph G){ int min, i, j, k; int adjvex[MAXVEX]; //保存相关顶点下标 int low

2020-11-17 17:30:13 8013

原创 图与图的遍历

图与图的遍历本文参考自《大话数据结构》定义图(graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合。注意在图中数据元素,我们则称之为顶点(Vertex);在图结构中,不允许没有顶点;在图中,任意两个顶点之间都可能有关系,顶点之间的逻辑关系用边来表示,边集可以是空的;各种图定义无向边 :若顶点vi到vj之间的边没有方向,则称这条边为无向边(Edge),用无序偶对(vi,vj)表示。如果图中任

2020-11-15 23:37:37 373

原创 哈夫曼树(C语言简单实现)

哈夫曼树(C语言简单实现)本文参考自《大话数据结构》,至于原理图那些,这里就不赘述了,网上很多,自己找。下面做了简单代码实现,代码依然存在较多缺陷,但是基本可运行,不喜勿喷,有改进和建议欢迎评论区评价。树的路径长度就是从树根到每一结点的路径长度之和。结点的带权的路径长度为从该结点到树根之间的路径长度与结点上权的乘积。树的带权路径长度为树中所有叶子结点的带权路径长度之和。假设有n个权值{w1,w2,…,wn},构造一棵有n个叶子结点的二叉树,每个叶子结点带权wk,每个叶子的路径长度为1k,我们通常记

2020-11-13 00:25:54 4360 2

原创 树、森林与二叉树相互转换

树、森林与二叉树相互转换本文参考自《大话数据结构》树转换为二叉树加线,在所有兄弟结点之间加一条连线;去线。对树中每个结点,只保留它与第一个孩子结点的连线,删除它与其他孩子结点之间的连线;层次调整。以树的根结点为轴心,将整棵树顺时针旋转一定的角度,使之结构层次分明。注意第一个孩子是二叉树的左孩子,兄弟转换过来的孩子是结点的右孩子。森林转换为二叉树森林由若干棵树组成,可以理解为,每一颗树都是兄弟。把每棵树转换为二叉树第一棵二叉树不动,从第二棵开始,依次把后一棵二叉树的根结点作为前一

2020-11-12 09:48:26 309

原创 线索二叉树(C语言简单实现)

线索二叉树本文参考自《大话数据结构》原理​ 对于一个有n个结点的二叉链表,每个结点有指向左右孩子的指针域,所以一共有2n个指针域。而n个结点的二叉树一共有n-1条分支数,也就是说,其实是存在2n-(n-1)=n+1个空指针域,这些空指针域不存储任何东西,白白浪费着内存的资源。​ 我们做遍历的时候,比如中序遍历,我们可以知道任意一个结点的前驱和后继是谁;但是在二叉链表中给你,我们只能知道每个结点指向其左右孩子结点的地址,而不知道某个结点的前驱和后继。​ 为了充分利用这些空地址,可以用来存放

2020-11-11 17:25:18 678

原创 选择排序

选择排序通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换。/* 对顺序表L作简单选择排序*/void SelectSort(SqList *L){ int i, j, min; for(i=1;i<L->length;i++){ min = i; for(j=i+1;j<=L->length;j++){ if(L->r[min] > L->r[j]) min =

2020-11-10 20:57:23 212

原创 冒泡排序

冒泡排序本文参考自《大话数据结构》,这本书介绍的冒泡排序让我对之前学的冒泡有了更深的理解。冒泡排序(Bubble Sort)一种交换排序,基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止 。交换函数/* 交换值 */void swap(SqList* L, int i, int j){ int temp = L->r[i]; L->r[i] = L->r[j]; L->r[j] = temp;}1.0版本/* 顺

2020-11-10 20:50:12 414

原创 二叉树(C语言简单实现)

本文参考自《大话数据结构》树定义树是n(n>=0)个结点的有限集。n=0时称为空树。在任意一颗非空树中:有且仅有一个特定的称为根(Root)的结点;当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1、T2、…、Tm,其中每一个集合本身又是一颗树,并且称为根的子树。树的结点包含一个数据元素及若干指向其子树的分支。 结点拥有的子树数称为结点的度。度为0的结点称为叶结点或终端结点;度不为0的结点称为非终端结点或分支结点。除根结点之外,分支结点也称为内部结点。树的度是.

2020-10-31 21:48:02 1873

原创 串(C语言简单实现)

串(C语言)本文参考自《大话数据结构》定义串是由零个或多个字符组成的有限序列,又名叫字符串。抽象数据类型ADT 串(string)DATA 串中元素仅由一个字符组成,相邻元素具有前驱和后继关系。Operation StrAssign(T,*chars):生成一个其值等于字符串常量chars的串T StrCopy(T,S):串S存在,由串S复制得串T ClearString(S):串S存在,将串清空 StringEmpty(S):若串S为空,返回true,否则返回

2020-10-19 13:59:56 1648

原创 循环队列(C语言简单实现)

循环队列定义把队列中,头尾相接的顺序存储结构成为循环队列。循环队列存在的问题:当空队列时,front 等于 rear;当队列满时,front 等于 rear,那么如何才能判断队列是满还是空?解决:当队列空时,条件就是front=rear;当队列满时,保留一个元素空间。即当队列满时,数组中还有一个空闲单元。假设队列的最大尺寸为QueueSize,那么队列满的条件就是:(rear+1)%QueueSize == front;队列的长度计算公式:(rear-front+QueueSize)%Q

2020-10-16 17:59:11 507

原创 队列(C语言简单实现)

队列(C语言)本文参考自《大话数据结构》定义​ 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表,简称FIFO(First In First Out),允许插入的一端称为队尾,允许删除的一端称为队头。抽象数据结构ADT 队列(Queue)Data struct Queue{ SElemType data; //数据域 struct Queue* front; //前驱 struct Queue* next; //后继 }; st

2020-10-16 15:16:40 666

空空如也

空空如也

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

TA关注的人

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