自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(122)
  • 资源 (1)
  • 收藏
  • 关注

原创 JAVA-JVM-GC垃圾回收机制

  1.GC垃圾回收内容比较多.首先我们需要先知道它的垃圾回收的范围:由上图可以知道GC的垃圾回收在方法区和堆,但99%的垃圾会在堆中产生!2. 首先我们需要知道堆结构:堆内存分为三个区域:新生区(伊甸园区)young/new养老区 old永久区 perm新生区:也可以再分为伊甸园区,和幸存区(有两个:from区和to区)堆内存结构了解完后再来解释一下各个区的意思:新...

2020-04-27 11:09:25 960 1

原创 怎么在springboot实现简单的登录操作关于拦截器中cookie,token,redis的使用,以及使用全局变量ThreadLocal

1.什么情况下需要登录操作?  首先抛出一个问题,什么情况下才需要登录操作,其实登录操作在很多的管理系统,后台系统中都会涉及到的一个看似简单,但是又特别重要的操作2.登录是简单的验证数据库账号密码,这么简单吗?  在之前我总觉得登录应该是一个很简单的操作,验证数据库?然后通过.但是这样做的一个简单的判断,能完成登录操作,但是?我能不能绕过你的登录呢?答案是可以的.我最开始可以不调用你的登录接口,我直接调用你的后台其他接口,就能实现绕过验证,进行操作你的管理系统.这样你的登录操作对我来说,形同虚设.3

2021-01-01 17:14:34 1339

原创 关于xmind2020超级详细的安装教程

鉴于网上很多关于xmind的安装方式,版本等等,都不规范,所以我自己写一篇关于xmind安装破解的文章第一步:首先我得拿到xmind的安装包以及破解包,下面附上链接:链接:https://pan.baidu.com/s/1AnJMg33KIbCFgCWau0S0NA提取码:j7sb拿到这个的小伙伴后打开自己的百度网盘保存文件,进行下载.第二步:下载完毕之后,我们要确认一下是不是下载到了这个文件:接着我们双击XMind-2020-for-Windows-64bit-10.1.0-2020032

2020-11-29 20:19:34 5508 12

原创 记录一篇关于条件查询语句的用法:1.通过QueryWrapper进行条件构造2.通过Example进行条件构造

一. 前言  在很多的业务场景中,除了简单的增删查改语句,我们还会有用到一些特殊的查询,比如说条件查询,模糊查询等等,在java中构建条件语句的封装类也有很多,其底层就是帮我们把sql语句给封装好,方便我们进行调用.这里我浅显的记录两种构造条件语句的类,第一种:QueryWrapper举个例子:查询课程信息,带分页显示它的使用方式如下: //创建一个page对象 Page<EduCourse> pageCourse = new Page<>(curren

2020-11-09 14:31:06 2279

原创 23种设计模式(第三部分): 1.适配器模式(包含简介相关代码示例) 2. 桥接模式(相关代码,思想学习)

接下来我们学习结构型设计模式一. 结构型模式作用从程序的结构上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题分类适配器模式代理模式桥接模式装饰模式组合模式外观模式享元模式二. 适配器模式将一个类的接口转换成客户希望的另一个接口,Adapter模式使得原来由于接口不兼容而不能一起工作的那些类可以在一起工作角色分析目标接口: 客户所期待的接口,目标可以是具体的或者抽象的类,也可以是接口需要适配的类: 需要适配的类,或适配者类适配器: 通过包装一个需要

2020-10-23 10:47:58 211

原创 23种设计模式(第二部分): 1.建造者模式(包含简介相关代码示例) 2. 原型模式(相关代码,思想学习)

一. 建造者模式建造者模式也属于创建型模式,他提供了一种创建对象的最佳方式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象用户只要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细节隐藏起来)例子工厂(建造者模式): 负责制作汽车(组装过程和细节在工厂里面)汽车购买者(用户): 你只需要说出你需要的型号(对象的类型和内容),然后直接购买就可以使用了,(

2020-10-22 16:02:07 138

原创 23种设计模式(第一部分): 1.工厂模式(包含简单工厂模式,方法工厂模式简介相关代码示例) 2. 抽象工厂模式(相关代码,思想学习)

一. 工厂模式作用实现了创建者和调用者分离详细分类简单工厂模式工厂方法模式抽象工厂模式OOP七大原则开闭原则: 对扩展开放,对修改关闭依赖倒置原则: 面向接口编程,不要面向实现编程迪米特法则: 只与你的直接朋友交谈,不跟陌生人说话核心本质实例化对象不使用new,用工厂方法代替将选择实现类,创建对象统一管理和控制,从而将调用者跟我们的实现类解耦三种模式简单工厂模式用来生产同一等级结构中的任意产品(对于增加新的产品,需要求该已有代码)工厂方法模式用

2020-10-22 14:14:41 206

原创 什么是java中的设计模式,设计模式有多少种,OOP七大原则

什么是设计模式?设计模式是前辈对代码开发经验的总结,是解决特定问题的一系列套路.它不是语法规定,而是一套用来提高代码可复用性,可维护性,可读性,稳健性以及安全性的解决方案1995年GOF(Gang of Four 四人组/四人帮) 合作出版了<设计模式:可复用面向对象软件的基础>一书,共收录了23中设计模式,从此树立了软件设计模式领域的里程碑,人称GoF设计模式学习设计模式的意义设计模式的本质是面向对象设计原则的实际运用,是对类的封装性,继承性,多态性,以及类的关联关系.

2020-10-22 09:59:14 121

原创 数据结构与算法(35):骑士周游问题(马踏棋盘算法相关实现代码)

马踏棋盘算法介绍和游戏演示马踏棋盘算法也被称为骑士周游问题将马随机放在国际象棋的8×8棋盘Board[0~7][0~7]的某个方格中,马按走棋规则(马走日字)进行移动。要求每个方格只进入一次,走遍棋盘上全部64个方格骑士周游问题的解决思路创建棋盘chessBoard,是一个二维数组将当前位置设置为已经访问,然后根据当前位置,计算马儿还能走哪些位置,并放入到一个集合中(arrayList),最多有8个位置,每走一步,就是用step+1遍历arrayList中存放的所有位置看看.

2020-10-21 18:06:42 587

原创 数据结构与算法(34): 弗洛伊德算法(介绍,最短路径相关实例)

弗洛伊德(Floyd)算法介绍和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法。该算法名称以创始人之一、1978年图灵奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名弗洛伊德算法(Floyd)计算图中各个顶点之间的最短路径迪杰斯特拉算法用于计算图中某一个顶点到其他顶点的最短路径。弗洛伊德算法 VS 迪杰斯特拉算法:迪杰斯特拉算法通过选定的被访问顶点,求出从出发访问顶点到其他顶点的最短路径;弗洛伊德算法中每一个顶点都是出发访问点,所.

2020-10-21 16:36:35 417

原创 数据结构与算法(33):迪杰斯特拉算法(迪杰斯特拉介绍及其最短路径问题相关实例代码)

应用场景-最短路径问题看一个应用场景和问题:战争时期,胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在有六个邮差,从G点出发,需要分别把邮件分别送到 A, B, C , D, E, F 六个村庄各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里问:如何计算出G村庄到 其它各个村庄的最短距离?如果从其它点出发到各个点的最短距离又是多少?...

2020-10-21 15:46:09 321

原创 数据结构与算法(32):克鲁斯卡尔算法(介绍,最小生成树相关实例及其代码实现)

看一个应用场景和问题:某城市新增7个站点(A, B, C, D, E, F, G) ,现在需要修路把7个站点连通各个站点的距离用边线表示(权) ,比如 A – B 距离 12公里问:如何修路保证各个站点都能连通,并且总的修建公路总里程最短?克鲁斯卡尔算法介绍克鲁斯卡尔(Kruskal)算法,是用来求加权连通图的最小生成树的算法。基本思想:按照权值从小到大的顺序选择n-1条边,并保证这n-1条边不构成回路具体做法:首先构造一个只含n个顶点的森林,然后依权值从小到大从连通网中选择边加入.

2020-10-20 16:47:08 280

原创 数据结构与算法(31):普里姆算法(介绍,相关应用场景的实例修路问题代码实现)

应用场景-修路问题看一个应用场景和问题:(1)有胜利乡有7个村庄(A, B, C, D, E, F, G) ,现在需要修路把7个村庄连通各个村庄的距离用边线表示(权) ,比如 A – B 距离 5公里问:如何修路保证各个村庄都能连通,并且总的修建公路总里程最短?思路分析: 将10条边,连接即可,但是总的里程数不是最小.正确的思路,就是尽可能的选择少的路线,并且每条路线最小,保证总里程数最少.进而引出一个概念最小生成树修路问题本质就是就是最小生成树问题, 先介绍一下最小生成树(.

2020-10-20 15:20:15 829

原创 数据结构与算法(30): 贪心算法简介(相关实例集合覆盖问题及其代码实现)

贪心算法介绍贪婪算法(贪心算法)是指在对问题进行求解时,在每一步选择中都采取最好或者最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法贪婪算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对近似(接近)最优解的结果抛出实际案例应用场景-集合覆盖问题假设存在下面需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号广播台覆盖地区k1“北京”, “上海”, “天津”.

2020-10-20 11:07:13 682

原创 数据结构与算法(29):KMP算法(核心思想分析)及其相关应用实例(与暴力字符串匹配代码实现)

应用场景-字符串匹配问题字符串匹配问题::有一个字符串 str1= ““陈骁聪 陈骁聪你陈骁 陈骁聪你陈骁聪你陈骁你好””,和一个子串 str2=“陈骁聪你陈骁你”现在要判断 str1 是否含有 str2, 如果存在,就返回第一次出现的位置, 如果没有,则返回-1KMP算法暴力匹配算法如果用暴力匹配的思路,并假设现在str1匹配到 i 位置,子串str2匹配到 j 位置,则有:如果当前字符匹配成功(即str1[i] == str2[j]),则i++,j++,继续匹配下一个字符.

2020-10-19 17:01:51 266 1

原创 数据结构与算法(28):分治算法,动态规划算法(0-1背包问题代码实现,思路分析)

分治算法介绍分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……分治算法可以求解的一些经典问题二分搜索大整数乘法棋盘覆盖合并排序快速排序线性时间选择最接近点对问题循环赛日程表汉诺塔分治算法的基本步骤分治法在每层的递归上都有三个.

2020-10-19 15:33:35 1393

原创 数据结构与算法(27):图的基本介绍(图的深度优先遍历,图的广度优先遍历)以及相关的案例代码

一. 图的基本介绍为什么要有图?回顾一下线性表和树线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时, 这里我们就用到了图图的举例说明图是一种数据结构,其中结点可以具有零个或多个相邻元素。两个结点之间的连接称为边。 结点也可以称为顶点。如图:无向图2. 有向图3. 带权图图的表示方式图的表示方式有两种:二维数组表示(邻接矩阵);链表表示(邻接表)。邻接矩阵邻接矩阵是表示图形中顶点之间相邻关系的矩阵,对于

2020-10-15 17:35:34 476

原创 数据结构与算法(26):多路查找路(二叉树 和B树,B+ ,B* 问题分析)

一 . 二叉树和B树的问题分析二叉树的操作效率较高,但是也存在问题二叉树需要加载到内存的,如果二叉树的节点少,没有什么问题,但是如果二叉树的节点很多(比如1亿), 就存在如下问题:问题1:在构建二叉树时,需要多次进行i/o操作(海量数据存在数据库或文件中),节点海量,构建二叉树时,速度有影响问题2:节点海量,也会造成二叉树的高度很大,会降低操作速度.引出了一个多叉树的概念在二叉树中,每个节点有数据项,最多有两个子节点。如果允许每个节点可以有更多的数据项和更多的子节点,就是多叉树(mult

2020-10-15 16:15:34 144

原创 数据结构与算法(25):平衡二叉树(AVL树 左旋转,右旋转 双旋转)介绍及其相关案例

一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST), 并分析问题所在BST 存在的问题分析:左子树全部为空,从形式上看,更像一个单链表.插入速度没有影响查询速度明显降低(因为需要依次比较), 不能发挥BST 的优势,因为每次还需要比较左子树,其查询速度比 单链表还慢解决方案-平衡二叉树(AVL)平衡二叉树基本介绍平衡二叉树也叫平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树, 可以保证查询效率较高。具有以下特点

2020-10-14 16:13:25 520 1

原创 数据结构与算法(24):二叉排序树(增删查改)及其相关案例

先看一个小例子给你一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加。你会怎么做呢?解决方案分析使用数组数组未排序, 优点:直接在数组尾添加,速度快。 缺点:查找速度慢.数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速度慢。使用链式存储-链表不管链表是否有序,查找速度都慢,添加数据速度比数组快,不需要数据整体移动。使用二叉排序树二叉排序树介

2020-10-14 11:29:47 842 1

原创 数据结构与算法(23):树结构实际应用之赫夫曼树(赫夫曼树,数据压缩和解压代码演示)

一 . 赫夫曼树的基本介绍给定n个权值作为n个叶子节点,构造一颗二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为赫夫曼树赫夫曼树是带权路径长度最短的树,权值较大的结点离根比较近赫夫曼树几个重要概念和举例说明路径和路径长度:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1结点的权及带权路径长度:若将树中结点赋给一个有着某种含义的数值,则这个

2020-10-13 17:15:17 537

原创 数据结构与算法(22):堆排序(二叉树)及其相关案例

1.堆排序基本介绍堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogN),它是一种不稳定的排序堆是具有以下性质的完全二叉树,每个节点的值都大于或者等于其左右孩子节点的值称为大顶堆.**注意:**没有要求节点的左孩子和右孩子的大小关系每个结点的值都小于或等于其左右孩子节点的值,称为小顶堆大顶堆举例说明我们对堆中的结点按层进行编号,映射到数组中就是下面这个样子:大顶堆特点:arr[i] >= arr[2i+1] &am

2020-10-12 11:00:45 366

原创 java基础面向对象编程小结

使用new操作符,可以创建一个类的实例/对象使用new创建一个类的实例之后,类中定义的每一种变量都可以被赋予其类型的初始值这个和数组也是一样的使用一个同类型的对象变量,可以指向并操作这个实例,这两点和数组都很类似点操作符,是用来访问/操作前面实体的属性,类似于"的"引用数据类型java中的数据类型分为基本数据类型和引用数据类型一个类型的引用,只能指向该类型的实例引用数据类型包含两部分信息:类型和实例每一个引用数据类型的变量,都是指向某个类的一个实例或者对象,不同类型的-.

2020-10-10 16:48:22 141

原创 数据结构与算法(21):顺序存储二叉树及其线索二叉树相关用例

一.顺序存储二叉树的概念基本说明从数据存储来看,数据存储的方式和树的存储方式可以相互转换,即数组可以转换成树,树也可以转换成数组顺序存储二叉树的特点顺序二叉树通常只考虑完全二叉树第n个元素的左子节点为2*n+1第n个元素的父节点为2*n+2第n个元素的父节点为(n-1)/2示范例:要求:右图的二叉树的结点,要求以数组 的方式来存放 arr : [1, 2, 3, 4, 5, 6, 6]要求在遍历数组 arr时,仍然可以以 前序遍历,中序遍历和后序遍历的 方式完成结点的遍历

2020-10-10 16:44:49 137

原创 数据结构与算法(20):树结构基础部分及其(二叉树代码增删查改实现)相关用例

一.为什么需要树这种数据结构数组存储方式的分析优点:通过下标方式访问元素,速度快,对于有序数组可以使用二分查找提高检索速度缺点: 如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低对数组添加元素,底层就是一个数组扩容操作:先拷贝原来的数组,再加入新的元素.ArrayList底层维护了数组object[]...

2020-10-09 15:12:47 272

原创 数据结构与算法(19):哈希表介绍及其相关用例

一.哈希表的介绍散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。为什么要使用哈希表哈希表的结构:哈希表属于一种数据结构不是算法.代码实现:package com.qiu.hashtable;import java.util.Scanner;public class HashTableDemo {

2020-10-08 13:54:02 417

原创 数据结构与算法(18):查找算法(顺序查找,二分查找,二分查找优化,插值查找,斐波那契查找)介绍及其应用实例

一. 查找算法介绍顺序(线性)查找二分查找/折半查找插值查找斐波那契查找顺序查找代码展示:package com.qiu.search;public class SeqSearch { public static void main(String[] args) { int[] arr = {1,211,54,84,56}; int index = seqSearch(arr,211); if (index == -1){ Syste

2020-10-08 10:59:22 318

原创 数据结构与算法(17):基数排序及其应用实例

一. 基数排序(桶排序)介绍基数排序(radix sort)属于分配式排序,又被称为桶子法,它是通过键值的各个位的值,将要排序的元素分配至某些桶中,达到排序的作用基数排序法属于稳定的排序,基数排序法的是效率高的稳定性排序法基数排序是桶排序的扩展基数排序是1887年赫尔曼发明的,它的实现:将是整数按位数切割成不同的数字,然后按每个位数分别比较二. 基数排序的基本思想  将所有待比较数值统一为同样的数位长度,数为较短的数前面补零,然后,从最低位开始,依次进行一次排序.这样从最低位排序一直到最高为

2020-10-07 11:41:07 910

原创 数据结构与算法(16):归并排序:及其相关的用例

一.归并排序  是利用归并的思想实现的排序方法,该算法采用经典的分治策略(分治法将问题分成一些小的问题然后递归求解,而治的阶段则将分的阶段得到的各个答案修补在一起,即分而治之)分得过程中,将每个元素拆分出来,通过合并,将其排序,最核心的部分在于治.解释上图操作(这里将的是治这个阶段,讲解下最后一次合并):定义了一个i,j分别指向两个有序的子序列的最前面,将i,j指向的数据做比较,将最小的那个数据指向temp数组,也就是临时数组如果上述中是i最小,第二次就将i右移一次.假如说是j最小,同样的将j

2020-10-07 10:20:36 186

原创 数据结构与算法(15):快速排序讲解及其实例演示

一:快速排序的介绍  快速排序是对冒泡排序的一种改进,其基本思想就是通过一趟排序,将要排序的数据分割成两个独立的部分,其中的一部分的所有数据都比另一部分要小,然后按照此方法对这两个部分数据进行快速排序,整个排序过程可以递归进行,以此让整个数据达到一个有序序列下面进行一个思路的分析过程对 [-9,78,0,23,-567,70] 进行分析找到下标中间的值.也就是这个数组中的0从左边开始找,找到78比0大,再从右边开始找,找到一个-567比0小的数,所以可以进行交换交换过后:[-9,-567,0

2020-10-01 22:48:42 665

原创 数据结构与算法(14):希尔排序及其实例讲解

  在上一个关于算法的博客中我们谈到了插入排序,从时间复杂度来说确实会比冒泡好的太多,但是插入排序是会存在问题的,首先我们看下一个简单的插入排序,进行问题复现举例:数组arr ={2,3,4,5,6,1 } 当需要插入的数最小为1时,插入排序的过程是:{2,3,4,5,6,6} ->{2,3,4,5,5,6} ->{2,3,4,4,5,6} ->{2,3,3,4,5,6} ->{2,2,3,4,5,6} ->{1,2,3,4,5,6}.我们最终会发现当需要插入的数

2020-09-23 14:13:02 7332

原创 数据结构与算法(13):插入排序(介绍,实例,推导代码)

一:插入排序插入排序算法的介绍:插入法排序属于内部排序法,是对于预排序的元素以插入的方式找寻该元素的适当位置,然后达到排序的目的插入排序的基本思想插入排序的基本思想:把N个待排序的元素看成一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码,依次与有序表的元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表.**理解:**从无序表中每次挑出一个元素,并在有序表中进行排序二:插入排序的应用实例

2020-09-17 19:39:03 180

原创 数据结构与算法(12):选择排序(含相关的实例)

一:选择排序基本介绍  选择式排序也属于内部排序法,是从待排序的数据中,按照指定的规则选出某一元素,再依规定交换位置后达到排序的目的选择排序思想:选择排序(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]中选取

2020-09-16 18:44:59 365

原创 数据结构与算法(11):冒泡排序(应用实例分析)

一:冒泡排序的基本介绍  冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。  因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。(这里说的优化,可以在冒泡排序写好后,在进行)我们举一个具体的案例来说明冒泡法。我

2020-09-16 10:47:41 1505

原创 数据结构与算法(10):算法的时间复杂度

一:时间频度的基本介绍  一个算法花费的时间与算法中语句的执行次数成正比例,哪一算法中语句回字形的次数越多,它的时间花费的就越多,一个算法中的语句执行次数称为语句频度或者时间频度,即为T(n)比如说:计算1-100所有的数字之和二:算法的时间复杂度结论:2n^2+3n+10 和 2n^2 随着n 变大, 执行曲线无限接近, 可以忽略 3n+10n^2+5n+20 和 n^2 随着n 变大,执行曲线无限接近, 可以忽略 5n+20结论:随着n值变大,5n^2+7n 和 3n^2 +

2020-09-16 09:30:29 568

原创 数据结构与算法(9):递归问题(打印问题,阶乘问题,迷宫小案例,八皇后问题)

一:递归的概念简单的说:递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码变得简洁.打印问题阶乘问题二:递归调用的规则1.当程序执行到一个方法时,就会开辟一个独立的空间(栈)然后执行到了test(3)不会直接执行结果,而是继续的开辟一个新的栈…这个时候的if条件不成立,再出来执行输出语句,由于在n=2时才执行输出,然后执行n=2执行完了后,n=2的栈就没了,然后再执行n=3的栈,同理一直向下执行,直到主方法执行完毕之后,直接退出程序.

2020-09-15 19:31:46 174

原创 数据结构与算法(8):前缀表达式(波兰表达式),中缀表达式,后缀表达式(逆波兰表达式:实例逆波兰计算器)

一:前缀表达式的计算机求值  从右到左扫描表达式,遇到了数字,就将数字压入堆栈,遇到运算符就将运算符压入堆栈,弹出栈顶的两个数,用运算符对他们做相应的计算.(栈顶元素,和次顶元素).并将结果入栈,接着重复上述的过程指导表达式的最左端,最后运算得出的值即为表达式的结果举个例子:(3+4)*5-6对应的前缀表达式就是-*+3456,针对前缀表达式求值步骤如下:从右到左进行扫描,将6543依次压入栈中遇到+运算符后弹出3和4(3为栈顶一个元素,4为次顶元素),计算出3+4的值后,得到的7压入栈中.接下

2020-09-14 19:27:23 892

原创 数据结构与算法(7):栈的介绍以及相关的实例应用(数组模拟栈,链表模拟栈,栈实现综合计算器(中缀表达式))

一:栈的介绍栈的英文为(stack)栈是一种先入后出的有序列表栈是限制线性表中的元素的插入和删除只能在线性表中的一端进行的一种特殊线性表,允许插入和删除的一端,为变化的一端,称为栈顶,另一端为固定的一端,称为栈底.根据栈的定义可知,最先放入栈中元素在栈底,最后放入的元素在栈顶,而删除元素正好相反,最后放入的元素最先删除,最先放入的元素最后删除.二:栈的应用场景子程序的调用:在跳往子程序前,会先将下一个指令的地址存到堆栈中,直到子程序执行完后将地址取出,以便恢复到原来的程序中处理递归调用:

2020-09-14 09:27:01 170

原创 数据结构与算法(6):单向环形链表的应用场景(josephu问题)

一:(约瑟夫环)问题n个人围成一个圈,指定一个数字n,从第一个人开始报数,每轮报到m的选手出局,由下一个人接着从头开始报,最后一个人是赢家。其中m>1,n>2。我们可以发现这是一个闭合的换,符合单向环形问题思路分析:假如说我有五个人,n=5,k=1,m=2.就是说数2下的话,出队编号就是:如图:首先就是2出队列,如下图接着4号出队列:接着1号开始出队列:再接着5号出列;最后一号出列:这样的话出队列的顺序就会变成2->4->1->5->3然后根据

2020-09-13 10:24:44 343

原创 数据结构与算法(5):双向链表的遍历,增加,删除修改(代码演示)

一:什么是双向链表  双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。  通俗的说就是一个双向链表中除了有每个节点包含的信息外,还多说两个指针,第一个为pre,指向前一个节点,第二个为next,指向后一个节点二:有关双向链表的操作双向链表的遍历  遍历双向链表和之前我写的单链表一样,唯一不同的就是双向链表可以往前查找,也可以往后查找2

2020-09-12 19:21:11 1456

java工程实训.zip

自己编写的java gui图形界面的水果操作系统。利用mysql数据库做基础。代码简单易懂,结构清晰。欢迎大家前来共同学习

2019-12-24

空空如也

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

TA关注的人

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