自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java泛型-类型通配符

java泛型-类型通配符类型通配符类型通配符一般是用“?”代替具体的类型实参所以,类型通配符是类型实参,而不是类型形参通配符的上限语法类/接口 <? extends 实参类型>要求该泛型的类型,只能是是实参类型,或实参类型的子类型代码示例//bean对象,泛型类public class Box<E> { private E first; public E getFirst() { return first; } public v

2020-12-06 21:10:47 456

原创 java泛型-泛型方法

java泛型-泛型方法泛型方法泛型类,是在实例化类的时候指明泛型的具体类型 泛型方法,是在调用方法的时候指明泛型的具体类型语法修饰符 <T, E, ...> 返回值类型 方法名(形参列表) { 方法体......}1.public与返回值中间<T>非常重要,可以理解为声明此方法为泛型方法2.只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员并不是泛型方法3.<T>表示该方法使用泛型T,此时可以在该方法中使用泛型T4.与泛

2020-12-06 13:58:10 347

原创 java泛型-泛型类、接口

java泛型-泛型类、接口泛型类的语法Class 类名称<泛型标识, 泛型标识, ...> { private 泛型标识 变量名;.....}常用的泛型标识:T E K V使用语法:类名<具体的数据类型> 对象名 = new 类名<>();代码示例/** * 泛型类定义 * @param <T> 泛型标识-参数类型 * T 创建对象的时候指定其具体的数据类型 */public class ProductGe

2020-12-05 13:48:05 207

原创 java泛型-泛型的背景和概念

背景Java推出泛型以前,程序员可以构建一个元素类型为Object的集合,该集合能够储存任意数据类型对象,而在使用该集合的过程中,需要程序员明确知道储存元素的数据类型,否则很容易引发ClassCastException异常,所以推出了泛型解决这一问题。泛型的概念Java泛型(generics)是JDK5中引入的一个新特性,泛型是提供了编译时类型安全监测机制,该机制允许我们在编译时检测到非法的数据类型结构。泛型的本质就是参数化类型,也就是所操作的数据类型被指定为一个参数。...

2020-12-05 13:31:30 179 1

原创 泛型-泛型的背景和概述

背景Java推出泛型以前,程序员可以构建一个元素类型为Object的集合,该集合能够储存任意数据类型对象,而在使用该集合的过程中,需要程序员明确知道储存元素的数据类型,否则很容易引发ClassCastException异常,所以推出了泛型解决这一问题。泛型的概念Java泛型(generics)是JDK5中引入的一个新特性,泛型是提供了编译时类型安全监测机制,该机制允许我们在编译时检测到非法的数据类型结构。泛型的本质就是参数化类型,也就是所操作的数据类型被指定为一个参数。...

2020-12-05 13:30:11 128

原创 设计模式-职责链模式

设计模式-职责链模式基本介绍职责链模式(Chain of Responsibility Pattern),又叫责任链模式,为请求对象创建了一个接收者对象的链。这种模式对请求的发送者和接收者进行解耦。职责链模式通常每个接收者通常都包含对另一个接收者的引用。如果一个对象请求不能处理该请求,那么他会把相同的请求传给下一个接收者,以此类推这种设计模式属于行为模式职责链模式的注意事项和细节将请求和处理分开,实现解耦,提高系统灵活性简化了对象,使对象不需要知道链的结构性能会受到影响,特别在链比较长

2020-11-30 21:54:23 74

原创 设计模式-策略模式

设计模式-策略模式基本介绍策略模式(Strategy Pattern)中,定义算法簇,分别封装起来,让他们之间可以相互替换,此模式让算法的独立变化独立于使用算法的客户这算法体现了几个设计原则,1.把变化的代码从不变的代码里分离出来;2.针对接口编程而不是具体类(定义了策略接口);3.多用组合/聚合,少用继承策略模式的注意事项和细节策略模式的关键是:分析项目中变化部分与不变部分策略模式的核心思想是:多用组合,聚合,少用继承;用行为类组合,而不是行为的继承,更有弹性体现了“对修改关闭,对扩展

2020-11-29 18:58:59 70

原创 设计模式-状态模式

设计模式-状态模式基本介绍状态模式(State Pattern):它主要用来解决对象存在多种状态转换时,需要对外输出不同的行为问题。状态和行为是一一对应的,状态之间可以相互转换当一个对象的在内在状态改变时,允许其改变行为,这个对象看起来是改变了其类状态模式的注意事项和细节代码有很强的可读性。状态模式将每个状态的行为封装到对应的一个类中方便维护。将容易产生问题的if-else语句删除了,如果把每个状态的行为都放到一个类中,每次调用方法时都要判断是什么状态,不但会产生很多if-else语句,而

2020-11-28 13:09:13 91

原创 设计模式-解释器模式

设计模式-解释器模式基本介绍在编译原理中,一个算数表达式通过词法分析器形成词法单元,而后这些词法单元再通过语法分析器构建语法分析树,最终形成一个抽象的语法分析树。这里的词法分析器和语法分析器都可以看做是解释器解释器模式(Interpreter Pattern):是指定一个语言(表达式),定义他的文法的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(表达式)应用场景a.应用可以将一个需要解释执行的语言中的句子表示作为一个抽象语法树b.一个重复出现的问题可以用一种简单的语言来表达c.

2020-11-27 15:24:48 79

原创 设计模式-备忘录模式

设计模式-备忘录模式基本介绍备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态可以这样理解备忘录模式:现实生活中的备忘录是用来记录有些要去做的事情,或者是记录已经达成的共同意见,以防忘记了。而在软件层面,备忘录模式有这相同的含义,备忘录对象用来记录一个对象的某种状态,或者某些数据,当要做回退的时,可以从备忘录里获取到原来的对数据进行恢复操作备忘录模式属于行为模式备忘录模式的注意事项和细

2020-11-26 18:49:04 65

原创 设计模式-中介者模式

设计模式-中介者模式基本介绍中介者模式(Mediator Pattern),用一个中介对象来封装一系列的对象交互、中介者模式使各个对象不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变他们之间的交互中介者模式属于行为模式,使代码易于维护比如MVC模式,C(Controller控制器)是M(Model模型)和V(View视图)的中介者,在后端交互时起到了中间人的作用中介者模式的注意事项和细节多个类进行相互耦合,会形成网状结构,使用中介者模式将网状结构分离成星型结构,进行解耦减少类间

2020-11-25 22:33:26 69

原创 设计模式-观察者模式

设计模式-观察者模式基本介绍对象之间多对一依赖的一种设计方案,被依赖的对象为Subject。依赖的对象为Observer,Subject通知Observer变化代码实现通过观察者模式实现发布天气数据的功能,主要是通过将观察者聚合在Subject,当Subject改变的时候进行调用每一个观察者//接口,让WeatherData来实现public interface Subject { void registerObserver(Observer o); void removeO

2020-11-24 20:43:02 89

原创 设计模式-迭代器模式

设计模式-迭代器模式基本介绍迭代器模式(Iterator Pattern)是常用设计模式,属于行为模式如果我们的集合元素是不同方式实现的,有数组,还有java的集合类,或者还有其他方式,当客户端要遍历这些元素的时候就要使用多种遍历方式,而且还会暴露元素的内部结构,可以考虑使用迭代器模式来解决。迭代器模式,提供一个遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部结构迭代器模式的注意事项和细节优点(1) 提供一个统一的方法遍历对象,客户端不用再

2020-11-23 22:21:47 86

原创 设计模式-访问者模式

设计模式-访问者模式基本介绍访问者模式(Visitor Pattern),封装一些作用于某些数据结构的各元素的操作,他可以在不改变结构的前提下定义作用于这些元素的新操作主要将数据结构与数据操作分离,解决数据结构和操作耦合性的问题访问者模式的基本工作原理是:被访问的类里面加一个对外提供接待访问者的接口访问者模式主要的应用场景:需要一个对象结构中的对象很多不同操作(这些操作彼此间没有关联),同时需要避免这些操作“污染”这些对象的类,可以选择访问者模式解决访问者模式的注意事项和细节优点(1)

2020-11-22 14:06:16 80

原创 设计模式-命令模式

设计模式-命令模式基本介绍命令模式(Command Pattern):在软件设计中,我们经常需要向某些对象发送请求,但是并不知道接收者是谁,也不知道被请求对的对象是哪个,我们只需要在程序运行时指定具体的请求即可,此时,可以用命令模式进行设计命令模式的使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活,实现解耦在命令模式中,会将一个请求封装为一个对象,以便使用不同的参数来表示不同的请求(即命名),同时命令模式也支持可撤销的操作。通俗易懂的理解:将军发布命令,士兵去执行。其中

2020-11-21 11:03:44 101

原创 设计模式-模板模式

设计模式-模板模式基本介绍模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行他的方法的模板。他的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行简单的说,模板方法模式定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重新定义该算法的某些特定步骤这种类型的设计模式属于行为设计模式模板方法模式的钩子方法在模板方法模式的父类中,我们可以定义一个方法,他默

2020-11-20 19:44:33 123

原创 设计模式-代理模式

设计模式-代理模式基本介绍代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能被代理的对象可以是远程对象,创建开销大的对象或需要安全控制的对象代理模式有不同的形式,主要三种 静态代理,动态代理和Cglib代理静态代理静态代理在使用时,需要定义接口或者父类,被代理的对象(即目标对象)与代理对象一起实现相同的接口或者是继承相同的类代码实现//目标类和代理类都要实现的共

2020-11-19 19:50:24 58

原创 设计模式-享元模式

设计模式-享元模式基本介绍享元模式(Flyweight Pattern)也叫蝇量模式:用于共享技术有效的支持大量细粒度的对象常用于系统底层开发,解决系统的性能问题。像数据库连接池,里面都是创建好的对象,在这些连接对象中有我们需要的则直接拿来用,避免重新创建,如果没有我们需要的,则创建一个享元模式能解决重复对象的内存浪费问题,当系统中有大量相似对象,需要缓冲池时,不需总是创建新对象,可以从缓冲池中拿。这样可以降低系统内存,同时提高效率享元模式的经典应用场景就是池技术了,String常量池,数据库连

2020-11-18 19:26:59 86

原创 设计模式-外观模式

设计模式-外观模式基本介绍外观模式可以理解为转换一群接口,客户只要调用一个接口,而不用调用多个接口才能达到目的外观模式就是解决多个复杂接口带来的使用困难,起到简化用户操作的作用外观模式的注意事项和细节外观模式对外屏蔽了子系统的细节,因此外观模式降低了客户端对子系统使用的复杂性外观模式对客户端和与子系统的耦合关系,让子系统内部模块更容易维护和扩展通过合理的使用外观模式,可以帮我们更好的划分访问的层次当系统需要进行分层设计的时候,可以考虑使用外观模式在一个遗留的大型系统时,可能这个系统已

2020-11-16 19:49:32 61

原创 设计模式-组合模式

组合模式基本介绍组合模式(Composite Pattern),又叫部分整体模式,他创建了对象组的树形结构,将对象组合成树状结构以表示“整体-部分”的层次关系组合模式依据树形结构来组合对象,用来表示部分以及整体层次组合模式属于结构型模式组合模式使得用户对单个对象和组合对象的访问具有一致性,即:组合能让客户以一致的方式处理个别对象以及组合对象组合模式的注意事项和细节简化客户端操作。客户端只需要面对一致的对象而不用考虑整体部分或者叶子节点的问题具有较强的扩展性。当我们要更改组合对象时,我们

2020-11-15 11:37:13 75

原创 设计模式-装饰者模式

设计模式-装饰者模式基本介绍装饰者模式(Decorator):动态的将新功能附加到对象上。在对象扩展方面,他比继承更有弹性,装饰者模式也体现了开闭原则(OCP)代码实现下面以星巴克点咖啡加不同调味品的组合功能进行编码//饮品,咖啡和调味品的父类public abstract class Drink { public String decs; private float price = 0.0f; public String getDecs() { return decs;

2020-11-12 21:21:33 55

原创 设计模式-桥接模式

设计模式-桥接模式基本介绍桥接模式(Bridge模式)是指:将实现与抽象放在两个不同的类层次中,使两个层次可以独立改变是一种结构型设计模式Bridge模式基于类的最小原则设计,通过使用封装,聚合以及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保证各部分独立性以及应对他们的功能扩展桥接模式的注意事项和细节实现了抽象和实现部分的分离,从而极大提供了系统的灵活性,让抽象部分和实现部分独立开来,这有助

2020-11-11 21:56:44 260 2

原创 设计模式-适配器模式

设计模式-适配器模式基本介绍适配器模式(Adapter Pattern)将某个类的接口转换成客户端期望的另一个接口表示,主要的目的是兼容性,让原本接口不匹配不能一起工作的两个类可以协同工作,其别名为包装器(Wrapper)适配器模式属于结构型模式主要分为3类:类适配器模式,对象适配器模式,接口适配器模式适配器模式工作原理适配器模式:将一个类得接口转换成另一个接口,让原本接口不兼容的类可以兼容从用户角度看不到适配者,是解耦的用户调用适配器转化出来的目标接口方法,适配器再调用被适配者的相关

2020-11-10 22:17:29 100

原创 设计模式-建造者模式

设计模式-建造者模式基本介绍建造者模式(Builder Pattern)又叫生成器模式,是一种对象构建模式。他可以将复杂对象的建造过程抽象出来(抽象类别),这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建他们,用户不需要知道内部的具体构造细节建造者模式的四个角色(1) Product(产品角色):一个具体的产品对象(2) Builder(抽象建造者):创建一个Product对象的各个部

2020-11-09 21:50:57 61

原创 设计模式-原型模式

设计模式-原型模式基本介绍原型模式(prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个发动创建的对象通过请求原型对象拷贝他们自己来实施创建,即对象.clone()形象的理解:孙大圣拔出毫毛,变出其他孙大圣浅拷贝对于数据类型是基本数据类型的成员变量,浅拷贝会直接进行传递,也就是将该属性值复制一份给

2020-11-08 10:38:25 55

原创 设计模式-工厂模式

设计模式-工厂模式简单工厂模式基本介绍简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族最简单实用的模式简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)在软件开发中,当我们用到大量的创建某种,某类,某批对象时,就会使用到工厂模式代码实现不同的传入参数创建不同的实例对象即可public static Pizza createPizza(String orderType) {

2020-11-07 10:40:42 61

原创 设计模式-单例模式

单例模式基本介绍所谓单例模式,就是采取一定的方法保证在整个软件系统中,对某个类只能存在一个实例对象,并且该类只提供一个取得实例对象的方法。比如Hibernate的SessionFactory,它充当数据源的代理,并负责创建Session对象。SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够,这就是会使用到单例模式单例设计模式八种方式1.饿汉式(静态常量)步骤:构造器私有化(防止new)类的内部创建对象向外暴露一个静态的公共

2020-11-04 19:29:10 61

原创 设计模式的目的以及七大原则

设计模式的目的1.代码重用性(即:相同功能的代码,不用多次编写)2.可读性(即:编程规范性,便于其他程序员阅读和理解)3.可扩展性(即:当我们需要增加新功能时,非常的方便,称为可维护性)4.可靠性(即:当我们增加新功能后,对原来的功能没有影响)5.使程序呈现高内聚,低耦合额特性设计原则核心思想1.找出应用中可能需要变化之处,把他们独立出来,不要和那些不需要变化的代码混在一起2.针对接口编程,而不是针对实现编程3.为了交互对象之间的松耦合设计而努力设计模式七大原则1.单一职责原则

2020-11-03 20:03:18 692 3

翻译 数据结构与算法-马踏棋盘

马踏棋盘马踏棋盘算法也被称为骑士周游问题将马随机放在过期象棋的8x8棋盘的某个方格中,马按走棋规则进行移动,要求每个方格只进入一次,走遍棋盘上全部64个方格骑士周游问题结局步骤和思路1.创建棋盘chessBoard,是一个二维数组 2.将当前位置设置为已个访问,然后根据当前位置,计算马儿还能走那些位置,并放到一个集合中(ArrayList),最多8个位置3.变量ArrayList存放的所有位置,看看哪个可以走通4.判断马儿是否完成了骑士周游问题注意:马儿不同的走法,会得到不同的结果,效率

2020-09-22 09:28:00 373

翻译 数据结构与算法-弗洛伊德算法(Floyd)

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

2020-09-21 09:39:29 1232

翻译 数据结构与算法-迪杰斯特拉算法(Dijkstra)

迪杰斯特拉算法(Dijkstra)迪杰斯特拉算法是典型的最短路径算法,用于计算一个节点到其他节点的最短路径。它的主要特点是以起始点为中心向外层层层扩展(广度优先搜索思想),直到扩展到终点为止应用场景战争时期,胜利乡有7个村庄(A, B, C, D, E, F, G),现有6个邮差,从G点出发,需要分别把邮件送到各个村庄各村庄的距离用边线表示(权),比如A-B距离5公里如何计算出G村庄到其他各个村庄的最短距离?如果从其他点出发到各个点的最短距离又是多少?算法过程设置出发顶点为v,顶点

2020-09-18 09:39:18 921

翻译 数据结构与算法-克鲁斯卡尔算法(Kruskal)

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

2020-09-17 09:55:50 850

翻译 数据结构与算法-普里姆算法

普里姆算法应用场景假设A、B、C、 D、E、F、G 为 7 座城市,为了方便生产生活,要为这 7 座城市建立通信。对于7个城市来讲,本着节约经费的原则,只需要建立 6 个通信线路即可修路问题的本质就是最小生成树问题,简称MST给定一个带权的无向连通图,如何选取一颗生成树,使树上所有边上权的总和最小,这叫最小生成树n个顶点,一定有n-1条边包含全部顶点普里姆算法设G=(V, E)是连通网,T=(U, D)是最小生成树,V,U是顶点集合,E,D是边的集合若从顶点u开始生成最小生成树,

2020-09-15 09:53:08 483

翻译 数据结构与算法-贪心算法

贪心算法贪心算法是指在对问题求解时,在每一步选择中都采取最好或者最优的选择。从而希望能够导致结果是最好或最优的算法贪婪算法得到的结果不一定是最优的结果,有时候会是最优,但是相对接近最优的结果应用场景现有北京,上海,天津,广州,深圳,成都,杭州,大连几个城市需要覆盖广播电台,选取最少的广播电台组使其覆盖上述城市选取的组:K1 -> 北京,上海,天津 K2 -> 广州,北京,深圳 K3 -> 成都,上海,杭州 K4 -> 上海,天津 K5- > 杭州,大连代码

2020-09-08 11:15:09 339

翻译 数据结构与算法-KMP算法

KMP算法KMP算法是一个解决模式串在文本串中是否出现过,如果出现过,找出最早出现位置的经典算法Knuth-Morris-Pratt字符串查找法,简称“KMP”算法,这个算法由DonaldKunth, Vaughan Pratt, James H.Morris三人于1977年联合发表,故取这三人的姓氏命名此算法KMP方法算法就是利用之前判断的信息,通过一个next数组,保存模式串中前后最长公共序列的长度,每次回溯时,通过next数组找到前面匹配过得位置,省去了大量的计算时间代码实现public

2020-09-08 11:08:18 159

翻译 数据结构与算法-动态规划算法

动态规划算法应用场景-背包问题有一个背包,容量为4磅,现有如下物品1)要求达到的目标为装入背包的总价值最大并且重量不超出2)要求装入的物品不重复基本思想1)动态规划算法的核心思想是:将大问题划分为小问题进行解决,从而一步步获取最优解的处理方法2)动态规划算法与分治算法类似,其基本思想也是将带求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解3)与分治算法不同的是,适用于动态规划求解的问题,经分解得到的子问题往往不是互相独立的。(即下一个子阶段的求解往往是建立在上一

2020-09-08 11:04:54 250

原创 数据结构与算法-分治算法

分治算法基本思想分治法是一种很重要的算法,字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的问题…直到最后子问题可以简单的直接求解,原问题的解即子问题解的合并。基本步骤分治算法在每一层递归上都有三个步骤1.分解:将原问题分解为若干个大小,相互独立,与原问题形式相同的子问题2.解决:若子问题规模较小而容易解决则直接解决,否则递归地解各个子问题3.合并:将各个子问题的解合并为原问题的解应用场景汉诺塔汉诺塔(又称河内塔)问题是源于印

2020-08-24 11:05:42 333

原创 数据结构与算法-图(深度优先/广度优先)

图图的常用概念1.顶点(vertex)2.边(edge)3.路径4.无向图(顶点之间没有方向)5.有向图6.带权图(带权值的图也叫网)图的表示方式二维数组(邻接矩阵)邻接矩阵是表示图形中顶点之家相邻关系的矩阵,对于n个顶点的图而言,矩阵的row和col表示的是1 … n个点。链表(邻接表)(1)邻接矩阵需要为每个顶点都分配n个空间,其实有很多边都是不存在的,会造成空间的一定损失(2)邻接表只关心存在的边,不关心不存在的边。因此没有空间浪费,邻接表由数组+链表组成图的深度优先(

2020-08-21 15:09:31 533

原创 数据结构与算法-赫夫曼树

赫夫曼树定义给定n个权值作为n个叶子结点,构造一颗二叉树,若该树的带权路径长度(WPL)达到最小,称这样的二叉树为最优二叉树,也成为赫夫曼树赫夫曼树是带权路径长度最短的树,权值较大的节点离根较近概念路径和路径长度在一棵树中,从一个节点往下可以达到孩子或孙子节点之间的道路,称为路径。通路中分支的数目称为路径长度。若规定根节点的层数为1,则从根节点到L层节点的路径长度为L-1...

2020-08-20 17:19:51 204

原创 数据结构与算法-平衡二叉树(AVL树)

平衡二叉树(AVL树)基本介绍平衡二叉树也叫平衡二叉搜索树,又被称为AVL树,可以保证查询效率较高具有以下特点(1)它是一颗空树或他的左右两个子树的高度差额绝对值不差过1(2)它的左右两颗子树都是一颗平衡二叉树平衡二叉树的旋转左旋转Node newNode = new Node(value);//把新的节点的左子树设置成当前的左子树newNode.left = left;//把新的节点的右子树设置成当前节点右子树的左子树newNode.right = right.left;

2020-08-20 13:21:45 148

空空如也

空空如也

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

TA关注的人

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