自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java的GUI

分为Swing和AWTAWT是Swing的前身AWT是抽象的窗口工具在java.awt包下Frame弹窗import java.awt.*;import java.util.Scanner;import java.awt.color.*;import javax.swing.JFrame;public class test { public static void main(String[] args) { Frame frame=new Frame("我的第一个第

2021-12-17 20:16:53 341

原创 最小生成树

MST:最小生成树,可能有多个,但是总权值之和是相同的,并且是最小的PrimKruskal

2021-12-17 15:28:32 175

原创 有向无环图(DAG)的表达形式

一个有向图不存在环DAG图一般用来化简表达式,比如树可以求表达式,但是有时候会有重复的算式出现,这时候可以用有向无环图来化简化简时,可以按照顶点中不可能出现相同的操作数来化简操作符能否合并要看他们的操作数是不是想同的,如果是相同的,则可以合并,每一层看有没有相同的操作符,如果有,看能不能合并用DAG图存储,得到的图是不唯一的,因为我们表达式生效的次序不同...

2021-12-17 15:05:14 1349

原创 Floyd算法

各顶点间的最短路径第三行改为k,即我们可以通过k这个节点到另外顶点,即可以靠它中转后一段的距离小于前一段的才要改意思是允许在这个点中转,所有元素都要扫一遍k如果等于3,则包含了k=0=1=2的情况,因为是一层一层递归的eg:我们从v0->v3,中间要先经过v2,但是vo->v2我们不一定是最短路径,所以我们还要找v0->v1的,所以是依次递归Floyd可以计算负权值的问题,但是不能解决带有负权回路的问题,因为我们可以一直走带负权的,这样子权值会越来越小...

2021-12-17 14:33:23 119

原创 Dijkstra算法

可以求带权/无权图的单源最短路径Floyd算法可以求带权/无权图的各顶点间的最短路径如果有负权值的带权图,则DJ可能会失效,所以DJ不适用于有负权值的带权图

2021-12-11 15:30:37 176

原创 图的BFS和DFS

图在BFS时,我们从第一个要搜索的节点出发,依次找相邻的节点遍历,遍历过的节点则标记1即可,因为图存在回路,所以我们在遍历时可能会遍历到已经遍历过的节点用bool visited[Maxsize];来表示标记数组,初始为false,访问过为true...

2021-12-11 14:48:37 2037

原创 十字链表法和邻接多重表法

十字链表:有向图邻接多重表:无向图

2021-12-10 15:22:35 355

原创 邻接矩阵法和邻接表法

邻接矩阵:使用数组存储,是顺序存储,若两个点之间相互邻接,即有边对应,则在矩阵写1(无向图)有向图则是a->b有一条对应的有向边,则在邻接矩阵写1无向图的邻接矩阵是对称矩阵,应为一条边对应两个点对于无向图来说,求节点的度可以将邻接矩阵的一行/一列的非零数相加起来即可求出该节点的度有向图求出度即为行元素非0值相加,入度即为列元素非0值相加,求度即为二者相加即可如果是用邻接矩阵求带权图,则在有边相连的那个地方填上该边的权值即可,如果不存在边,则可以在上面写个∞,代码即为INF邻接矩阵适合存

2021-12-10 15:00:21 1806

原创 图的基本结构

图是多对多的数据结构图有顶点集和边集,顶点个数为|V|,也称为图的阶,边条数为|E| 对于图的任意一条边,他必须得连接两个顶点一个图的顶点集不能为空集,但是一个图的边集可以为空集图分为有向图和无向图,无向边就叫边,有向边称为弧一般探讨简单图顶点的度对于无向图:即为依附于该顶点的边的条数,记为TD(v)对于有向图:入度为进来该顶点的,记为ID(v)出度为出来的该顶点的,记为OD(v),有向图的顶点的度为入度和出度之和对于n个顶点的无向图G,若G是连通图,则最少有n-1条边,若G

2021-12-10 14:05:15 1318

原创 Java的常用API

Math

2021-11-29 09:36:00 109

原创 树与森林的遍历

树的先根遍历若树非空,则先访问根节点,然后再依次对每颗子树进行先根遍历树的先根遍历序列与二叉树的先序遍历序列相同树的后根遍历树的后根遍历序列与对应二叉树的中序遍历序列相同树的层次遍历森林的先序遍历也可以将森林转化为二叉树,然后对二叉树进行先序遍历即可森林的中序遍历也等同于对二叉树的中序遍历...

2021-11-21 16:21:10 238

原创 树的存储结构

双亲表示法(顺序存储)每个节点中保存指向双亲的指针如果你要增加一个新元素,我们可以直接加入新元素,然后把他的双亲节点赋值一下就好了我们增加数据元素,无需按逻辑上的次序存储我们要删除一个节点,可以直接把他的双亲指针设置为-1,即可,也可以把最后面的元素填充到被删除的元素的位置去,这样子不会造成空间浪费,然后再节点数-1即可,但是如果你删除的是一个根节点,那么还得找到他的孩子节点也要对应的删除,所以就有了查询的操作孩子表示法(顺序+链式存储)节点可以存放指向第一个孩子的指针孩子兄弟表示法(链式

2021-11-21 15:55:26 378

原创 线索二叉树

一棵树根据节点的遍历序列可以得到除了首尾节点外,每个节点都有前驱和后继普通二叉树缺点:每次中序遍历都只能从根节点开始如果一颗二叉树的左孩子指针和右孩子指针指向的是他的前驱和后继,而不是他的左右孩子的话,那我们就把这种类型的指针称为线索以上均为中序线索二叉树先序和后序的原理与中序一样,就是左右线索不一样其实线索二叉树就是利用了二叉树本身所存在的n+1个空链域,把它作为线索中序遍历找中序前驱的时候,我们要先中序遍历,然后用visit来访问线索二叉树节点的定义初步建成的线索二叉树的l

2021-11-21 14:40:27 539

原创 Java的内部类

内部类定义在一个类中定义一个类,如:在一个类A的内部定义一个类B,类B就称为内部类内部类格式内部类访问特点外部类要访问内部类的成员,要先创建对象,这里的对象指的是内部类的对象!成员内部类局部内部类即定义在类的方法里面定义的类在内部类中,我们可以直接创建外部类的对象,但是不能直接创建内部类的对象(针对的是在外界,如果在外部类里面,是可以直接创立内部类的对象的)上图只针对公有类型的内部类!如果是私有类型:我们要在外部类定义一个方法,然后在方法里面定义内部类,然后在外面定义外部类的对

2021-11-01 09:27:36 87

原创 由遍历序列构建二叉树

给定一个遍历序列,不能确定一颗唯一的二叉树所以,要有两个才能推出,以下为两个的例子依次递归判断即可,每次要先找根节点,然后根据中序遍历找左右子树,然后依次递归两种遍历必需要包括中序遍历...

2021-10-26 15:02:06 173

原创 Java的形参和返回值

类名作为形参实际上要的是该类的对象类名作为返回值也是返回一个对象,所以要用该类的成员来接受抽象类名作为形参实际上他需要的是子类的对象,因为抽象类不能实例化,即不能直接创建对象,所以要用子类来继承从而实例化抽象类名作为返回名,实际上也是返回子类的对象如果形参是一个接口名,其实要的是该接口的实现类,即也是按照多态的方法来实现的方法的返回值是接口名,其实返回的是该接口的实现类对象...

2021-10-25 08:52:47 171

原创 哈夫曼树

2021-10-23 17:10:57 149

原创 树与二叉树

树的定义和基本术语树有根节点和分支节点和叶子节点,每个节点靠边来连接,每个节点里面存放的是数据空树 :节点数为0的树非空树:有且仅有一个根节点,没有后继的节点称为叶子节点,没有前驱的称为根节点,有后继的称为分支节点树的路径长度:即经过几条边节点的度:即每个节点有几个分支,度>0的为非叶子节点,=0的为叶子节点树的度:各节点的度的最大值森林:森林是m颗互不相交的树的集合,也允许有空森林的存在,即m=0树的常考性质1.节点总数=总度数+1m叉树:每个节点最多只能有m个孩子的树

2021-10-23 16:37:03 260

原创 特殊矩阵的压缩存储

一维数组的存储结构ElemType a[10];各数组元素大小相同,且物理上连续存放(即地址)二维数组的存储结构二维数组在存储时候有行优先和列优先两种存放方法行优先就是一行一行存列优先就是一列一列存好处:可以把非线性的逻辑结构转化成为线性的内存结构,可以实现随机存取普通矩阵的存储可以用二维数组存储对称矩阵的压缩存储定义:若n阶方阵中任意一个元素ai,j,都有ai,j=aj,i,则称该矩阵为对称矩阵对称矩阵关于主对角线对称,所以对称矩阵的上三角区的元素和下三角区的元素相同,所

2021-10-03 16:47:15 184

原创 栈在表达式求值的应用

一般比较喜欢考察后缀表达式上图为中缀表达式的例子先计算a+b,然后把a+b当作整体与c计算,所以后缀表达式这么写也可以先计算b-c,然后把b-c当作整体,与a相加,因为a是在左边,所以写在左边,最后再写个加号即可后缀表达式的结果不唯一,取决于中缀表达式你要让哪个先算但是计算机遵循左优先原则,就是只要左边的运算符能先计算,就优先算左边的若后缀表达式合法,则最后栈中指挥留下最后一个元素,即计算结果后缀转中缀即我们扫后缀表达式,扫到运算符,则加进入并且加个括号即可在前缀.

2021-10-02 17:26:25 121

原创 栈在括号匹配的应用

当我们遇到一个左括号时,我们就把他压入栈,遇到一个右括号,就把他出栈,并且检查是否与右括号匹配

2021-10-02 15:31:38 92

原创 数据结构队列

队列是只允许在一端进行插入,在另一端删除的线性表队列的插入操作称为入队,队列的删除操作称为出队一般从队尾进,队头出特点:先进入队列的元素先出队列(先进先出)FIFO队尾:允许插入队列的一端最靠近队尾的元素称为队尾元素对头:允许删除的一端最靠近对头的元素称为对头元素队列的基本操作队列的顺序实现1.队列的结构#define MaxSize 10typedef struct { ElemType data[Maxsize];//用静态数组存放队列元素 int front,rear;/

2021-09-28 17:10:03 286

原创 数据结构栈

栈其实就是一种插入和删除操作受限的线性表在线性表中,插入和删除操作可以在任意位置进行,而在栈中,只能在一端进行,即只能在表尾插入和删除栈是后进先出的一种数据结构,即后面入栈的元素反而先出栈(LIFO)栈有空栈,即没有任何元素栈的栈顶和栈底指的是栈的可以插入元素的一端和栈的不可以插入元素的一端所以,栈这个数据结构的逻辑操作和线性表一样,只不过数据的运算:即插入和删除有所不同在查找栈时,大多数只要查找栈顶元素即可栈的题型:告诉你入栈顺序,考你有哪些合法的出栈顺序一般出选择题,可以自行判断

2021-09-25 16:59:04 203

原创 数据结构线性表

#ifndef LinkList_h#define LinkList_h#include <iostream>#include <stdlib.h>#include <string>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0using namespace std;#endif#ifndef Linklist2_h#define Linklist2_h#include "Li

2021-09-12 21:53:04 111

原创 时间复杂度分析

时间复杂度分析1.纯循环有几层就是n多少方,一般循环2.递归快排和归并排序每层都是O(n),有logn层,所以是nlogn规模的复杂度二分logn,因为每次都是对半分,2的x次方等于n,所以x就是logn函数的渐近增长,我们在比如n方+n+1时,可以省略掉n+1,所以为n方的时间复杂度用常数1来取代程序中的所有加法函数,比如说x++,那么我们在运算的时候就可以把它当作1的累加,即把x当作1...

2021-09-05 15:20:59 1491

原创 Java的接口

Java的接口是在你要创建类下面的那个选项选择interface接口之间不能继承,即不能用extends,要用实现,即implements

2021-08-02 13:13:53 166

原创 Java的多态

多态概述同一个对象,在不同时刻表现出来的不同形态有父类引用指向子类对象的理解:就是上面动物 animal = new 猫(),这个动物就是父类,猫就是子类对象具体实现步骤先要有继承,然后在派生类中方法重写,然后在测试类中这么写:父类名 a=new 子类名();多态中成员访问特点虽说我们创建的是子类的对象,但是外界看到的只是父类的引用所以我们通过多态的形式访问成员变量时,他的编译要看左边,即调用成员变量时,要先看父类中有没有,父类中有才行且通过多态形式访问成员变量,我们访问到的是父类中

2021-08-01 14:41:54 127

原创 Java的修饰符

包其实就是文件夹,作用是对类进行分类管理针对非idea类型的ide,如记事本可以这么建立包导包即import …如果我们不写这个的话,我们每定义一个变量前面都要写上…然后才能继续定义比如Scanner类,我们没有导包java.util.Scanner的话我们要这么定义java.util.Scanner sc=new java.util.Scanner(System.in);类似头文件修饰符Java中的修饰符分为两大类权限修饰符和状态修饰符权限修饰符状态修饰符分为两种fi

2021-07-23 01:09:52 71

原创 Java的继承

继承概述继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法父类也被称为基类或者超类子类也被称为派生类我们在一个方法中使用变量时,他首先会在方法内部找,看这个变量是否存在,如果这个方法内部没有,那么就会去本类的成员去找,如果本类的成员没有,那么就会去父类的成员去找如果我们在一个方法和本类成员与父类成员都有相同变量名的变量,那么我们要直接访问方法中的直接输出即可,要访问本类的要用this,要访问父类的要用super继承中的构造方法会先调用父类

2021-07-21 14:52:13 91

原创 Java案例之学生管理系统(初级版)

实现思路首先要有一个学生类,里面有姓名,年龄,学号,居住地,然后里面包括无参构造方法和带参构造方法,还有get函数和set函数然后还有一个学生管理类里面包含主方法,还有添加学生信息的方法,查看学生信息的方法,删除学生信息的方法,修改学生信息的方法主方法里面的界面如下1.学生类的编写package bo;import java.util.Scanner;public class stu{ private String id; private String age; p

2021-07-20 15:59:21 166

原创 Java的集合基础

集合类的特点提供一种存储空间可变的存储模型,存储的数据容量可以发生改变先学ArrayListArrayList的构造方法和添加方法ArrayList在用之前需要导包import java.util.ArrayList;构造方法ArrayList<String> array=new ArrayList<> ();System.out.println(array);输出的是一对中括号,即[]追加方法array.add("hello");输出:[hello

2021-07-18 16:39:42 80

原创 Java的字符串

Java的字符串string1.string概述string类在java.lang包下,所以使用时不需要导包string类代表字符串,Java程序中的所有字符串文字,比如(“abc”)都被实现为此类的实例,即,Java程序中的所有双引号字符串,都是string类的对象字符串的特点string的构造方法最后一种其实没有使用构造方法的方式,而是直接给一个双引号扩起来的abc以直接赋值的方式来创建字符串对象无参构造方法String s1=new String();用字符数组来构造方法ch

2021-07-18 15:36:16 192

原创 Java的类与对象

Java的类与对象类的定义public class 类名{ //成员变量 //成员方法}创建对象eg:phone p=new phone()格式:类名 对象名=new 类名()使用对象:1.使用成员变量格式:对象名.变量名eg:p.x2.使用成员方法格式:对象名.方法名()eg:p.call()如果直接输出p的话,会输出p的地址来在java中,一般这么使用先创建一个package然后在package里面创建类在里面最上面要写package 包名你先给出一个类的定义

2021-07-10 18:16:59 113

原创 Java的debug

Java的debugdebug就是调试加断点操作和其他编译器相同运行时选择debug运行idea中的f7是下一行,单步调试idea中会有个debugger窗口和console的控制台窗口控制台就是看你输出了什么如果只有一个断点,直接点击去掉即可如果多个断点,点击进去这个图标红色的那个点进去后选择选择减号即可删去所有断点...

2021-07-09 15:22:32 81

原创 Java的Random

Java的RandomRandom的作用:产生一个随机数使用步骤:1.导包2.创建对象3.获取随机数1.导包import java.util.random;2.创建对象Random r=new Random();3.获取随机数int number=r.nextInt(10);获取数据范围[0,10),0可以取到,10不行如果要获取[1,10)的数据,则r.nextInt(10)+1即可然后就可以输出了...

2021-07-09 15:09:10 78

原创 Java数据输入

Java数据输入scanner使用的基本步骤1.导包2.创建对象3.接收数据1.导包import java.util.Scanner;导包的操作要在类定义前面2.创建对象Scanner sc=new Scanner(System.in);上面的格式中,只有sc是变量名可以变,其他的不能变3.接收数据int i=sc.nextInt();上面的格式中,只有i是变量名可以变,其他的都不能变这些都做完之后,就相当于c的cin>>x 然后再System.out.pri

2021-07-09 14:58:47 82

原创 Java类型转换

java类型转换类型转换分为强制类型转换和自动类型转换自动类型转换:把一个表示数据范围小的数值或者变量赋值给另一个表示数据范围大的变量eg:double a=10;10是整数,但是他可以自动转换为double类型的范围关系:强制类型转换:把一个表示数据范围大的数值或者变量赋值给另一个表示数据范围小的变量eg:int k=(int)88.88;...

2021-07-09 14:47:26 70

原创 Java的方法

方法的定义:方法是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集方法必须先创建才能使用,该过程称为方法定义方法创建后并不是直接运行的,需要手动使用后才执行,该过程称为方法调用为什么要用方法:因为如果你在程序中有很多地方要使用同样的代码块,你一个一个写太麻烦了,所以用方法将其打包成一个整体,在其他地方直接使用即可方法的定义和调用方法定义:public static void 方法名(){ //方法体}方法调用:方法名();方法定义后要在main方法里面调用,就和

2021-07-07 16:50:15 97

原创 java的输出

java的输出System.out.println() 在输出后面会追加一个换行System.out.pintf() 不会println如果要打印输出对象,且前面有""的话,在变量前面要加个+eg:System.out.println("a: " +a);//且在+a前面没有逗号而printf和c的差不多...

2021-07-07 15:23:11 88

原创 如何快速打出systemout.println和Java的数组

java快速打System.out.println()在idea中直接sout加回车即可java的数组有两种一种是 int [] arr表示定义一个int类型的数组,数组名字为arr一种是int arr []表示定义一个int类型的变量,变量名是arr数组所以使用第一种比较好java的数组必须先初始化,才能使用java的数组初始化是为数组分配内存空间,并且为每个数组元素赋值分为动态初始化和静态初始化动态初始化:初始化只指定数组长度,由系统为数组分配初始值eg: int [] arr

2021-07-06 13:42:59 1425

空空如也

空空如也

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

TA关注的人

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