自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2021-10-21绪论+线性表

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。逻辑结构集合/线性结构/树形结构/图状结构。存储结构顺序结构/链式结构/索引结构/散列结构基本运算的频度来评估时间点的复杂度时间复杂度的推断1.如果是i*2。。。则考虑logN2.如果是一个循环,根据对应关系,一个循环中往往是小于等于O(n),会有O(根号n),O(根号三方n)。。3.如果是多个循环往往是n的多次方4.对于递归函数的时间复杂度,通过T(n)=2T(n/2)+n 之类的函数进行递推,T(n)=2^k T(n/2^k)

2021-10-21 23:52:39 121 1

原创 设计模式考前预习—18_命令模式

这其实就是‘行为请求者’与‘行为实现者’党的紧耦合。对请求排队或记录请求日志,以及支持可撤销的操作。让编程融入生活。命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作,。吗。命令模式的作用:1.他能比较容易的设计一个命令队列,2.在需要的情况下,可以比较容易的将命令计入日志,3.允许接受请求的一方决定是否要否决请求。4.可以容易的实现对请求的撤销和重做。5.由于加进新的具体命令类不影响其她的类,因此增加新的具体命令类很容

2020-09-09 12:04:38 137

原创 设计模式考前预习—17_桥接模式

很多情况用继承会带来麻烦,对象的继承关系是在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与他的父类有非常紧密的依赖关系,以至于父类视线中的任何变化必然会导致子类发生变化。当你需要服用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖的关系限制了灵活性并最终限制了复用性。合成聚合复用原则:尽量使用合成聚合,尽量不要使用类继承。、优先使用对象的对象的合成聚合将有助于你保持每个类被封装,并被集中在单个任务上,这样类和类继承层次会保持较小规模,并且

2020-09-09 11:17:08 126

原创 设计模式考前预习—16_单例 模式

所有类都有构造方法,不编码则系统默认生成空的构造方法,若有显示定义的构造方法,默认的构造方法就会失效。单例模式:保证一个类仅有一个实例,并提供一个访问她的全局访问点。通常我们可以让一个全局变量使得一个对象被访问,但他不能防止你实例化多个对象。一个最后的办法就是,让类自身负责保存她的唯一实例。这个可以保证没有其他实例可以被创建,并且它可以提供一个访问该实例的方法。单例模式因为Singleton类封装她的唯一实例,这样他可以严格的控制客户怎样访问他以及何时访问他。简单的说就是对唯一市里的受控访问。多线程

2020-09-09 10:35:16 98

原创 设计模式考前预习—15_组合模式

整体和部分可以被一致对待。组合模式: 将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户服单个对象和组合对象的使用具有一致性。透明方式和安全方式:透明方式:也就是说在Component中声明所有用来管理子对象的方法,其中包括Add、remove等。这样实现component接口的所有子类都具备了add和remove。这样做的好处是叶节点和枝节点对于外界没有区别,他们具备完全一致的行为接口。但问题也很明显,因为leaf类本身不具备add(),remove()方法的功能,所以实现它是没有

2020-09-09 08:51:23 111

原创 设计模式考前预习—14_备忘录模式

代码无错未必优备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。要保存的细节给封装在了memento中了,哪一天要更改保存的细节也不用影响客户端。memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只能是众多属性中的一小部分时,originator可以根据保存的么能头条信息还原到前一状态。如果在某一个系统中使用命令模式时,需要实现命令的撤销功能,那么命令模式就可以使用备忘录模式来存储

2020-09-08 22:43:17 107

原创 设计模式考前预习—13_适配器模式

适配器模式:将一个类的接口转换成客户希望的另外一个接口。adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。系统的数据和行为都正确,但接口不符时,我们应该考虑使用适配器,目的是使控制范围之外的一个原有对象的与某一个接口匹配。适配器模式主要应用与希望复用一些现存的类,但是接口又与复用环境要求不一致的情况。类适配器模式和对象适配器模式什么时候使用适配器模式?使用一个已经存在的类,但如果她的接口。也就是她的方法和你的要求不相同时,就应该考虑使用适配器模式。两个类所做的事情相同或是相

2020-09-08 20:57:29 106

原创 设计模式考前预习—12_状态模式

面向对象设计其实就是希望做到代码的责任分解。根据状态来分离和选择行为,状态模式是状态驱动由上下文决定。状态模式:状态模式是当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。状态模式主要解决的你是当控制一个对象状态装换的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来。将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在某个Concre

2020-09-08 20:13:11 97

原创 设计模式考前预习—11_抽象工厂模式

抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式优点与缺点:好处是易于交换产品系列,由于具体工厂类,需要改变具体工厂变得十分容易,他只需要改变具体工厂即可使用不同的产品配置。他让具体的创建实例过程与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户代码中。感觉抽象工厂模式与工厂方法模式就是多对多与一对多的区别。点击可看简单工厂、工厂方法、抽象工厂进阶 -反射using System.Reflec

2020-09-01 14:36:10 92

原创 设计模式考前预习—10_观察者模式

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己。观察者模式特点:将一个系统分割成一系列相互协作的类有一个很不好的副作用,那就是需要维护相关对象间的一致性。我们不希望为了维持一致性而是各类紧密耦合,这样会给维护、扩展、和重用都带来不便。当一个对象的改变需要同时改变其他对象时,而且他不知道具体有多少对象有待改变时,应该考虑使用观察者模式,一个抽象模型有两个方面,其中一方面依赖于另一方面,这是用观察者

2020-08-31 17:31:44 136

原创 设计模式考前预习—9_建造者模式

建造者模式:依赖倒转原则,抽象不应该依赖于细节,细节应该依赖抽象。建造者模式意图:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式作用:如果我们用了建造者模式,南无用户就只需要指定需要建造的类型就可以得到他们,而具体建造的过程和细节就不需知道了。建造者模式:将一个复杂对象的构建与他的表示分离,使得同样的构建过程可以创建不同的表示。Builder是为创建一个Product对象的各个部件制定的抽象接口。ConcreteBuilder是具体建造者,实现Builder

2020-08-31 16:36:47 88

原创 设计模式考前预习—8_外观模式

外观模式:为子系统中的一组接口提供一个一致的界面,此模板定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式使用:在设计初期,应该要有意识地讲不通的两个层分离,曾与层之间建立外观facade。其次,在开发阶段,子系统往往因为不断地重构演化而变得越来越复杂,增加外观Facade,可以提供一个简单的接口,减少他们之间的依赖。第三,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了。为新系统开发一个外观Facade类,来提供设计粗糙或者高度复杂的遗留代码的比较清晰见到的接口,让新

2020-08-25 20:36:55 98

原创 设计模式考前预习—7_原型模式

原型模式:用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。、原型模式就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。对于.net来说在System命名空间中提供了ICloneable接口,其中就是唯一的一个方法Clone(),一般在初始化的信息不发生变化的情况下,克隆是最好的方法。这既隐藏了对象创建的细节,又对性能是大大的提高。等于是不用重新初始化对象,而是动态的获得对象运行时的状态。深复制浅复制MemberwiseClone()方法是这样,如果字段是值类型的

2020-08-24 20:20:13 104

原创 设计模式考前预习—6_工厂方法模式

工厂方法模式:学习工厂方法模式就不得不提起简单工厂模式。简单工厂模式解决了简单工厂模式的优点:1、工厂类含有必要的判断逻du辑,可以决定在什么时候创建zhi哪一个产品类的实dao例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;2、简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。3、客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。4、通过引入配置文件,可以在不修改任

2020-08-20 22:03:16 108

原创 设计模式考前预习—5_代理模式

代理模式:为其他对象提供一种代理以控制对这个对象的访问。对于代理模式的理解:存在一个中间类即代理类,对原对象进行定义,用函数实现原函数对目标函数的连接,并对对应的同名函数进行调用。客户端调用代理类的函数代理模式的场合:一:远程代理:也就是为一个对象在不同的地址空间提供局部的代表。这样可以隐藏一个存在于不同地址空间的事实。(当在应用程序的项目中加入一个web引用,引用一个WebService,此时会在项目中生成一个webreference的文件夹和一些文件,其实他们就是代理,这就使得客户端程序调用代

2020-08-20 21:03:12 109

原创 设计模式考前预习—4_装饰模式

装饰模式:需要把所需的功能按正确的顺序串联起来进行控制。装饰模式:动态的给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。装饰模式是为已有功能动态的添加更多功能的一种方式。(小菜穿衣服为例子:首先是穿上衣的小菜,后来只加裤子鞋子即可)而不是一个一个蹦跶,上衣、裤子、鞋子、的小菜装饰模式的优点是:把类的装饰功能从类中搬移去除,这样可以简化原有的类。有效的把类的核心职责和装饰功能曲分开了。而且可以去除相关类中重复的装饰逻辑。component类用来定义一个对象接口,可以动态的

2020-08-20 20:06:04 93

原创 设计模式考前预习—3_单一职责原则,开放封闭原则,依赖倒转原则,迪米特法则。

单一职责原则

2020-08-19 22:36:42 111

原创 设计模式考前预习—2_策略模式

策略模式面向对象的三大特征:封装、继承和多态面向对象的优点:面向对象方法与传统的结构化方法有着显著区别。该思想提倡运用人类的思维方式,从现实世界中存在的事物出发来构造软件系统,它建立在“对象”概念基础上,以对象为中心,以类和继承为构造机制来设计和构造软件系统。1、易维护采用面向对象思想设计的结构,可读性高,由于继承的存在,即使改变需求,那么维护也只是在局部模块,所以维护起来是非常方便和较低成本的。2、质量高在设计时,可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的

2020-08-17 11:18:47 116

原创 设计模式考前预习—1_简单工厂模式

简单工厂模式面向对象编程思想可维护可复用可扩展考虑封装、继承、多态把程序耦合度降低。计算和显示的分离。即业务逻辑与界面逻辑分开。耦合度降低。简单工厂模式:有多个基本的功能类,一个功能抽象类、工厂类(用来集合和区分、调用功能类)。简单工厂模式:Simple Factory 模式根据提供给他的数据,返回几个可能类中的一个类的实例。通常她的返回的类都有一个公共的父类和公共的方法。优点和缺点:优点:1.工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建

2020-07-21 15:53:17 105

原创 设计模式考前预习—0

设计模式是啥?模:就是模型,模板的意思。式:就是方式、方法的意思。模式,就是可以作为模型或者模板的方法或者方法。类似于范例。**设计模式:**是一套呗反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易理被他人理解、保证代码可靠性。设计模式是解决某些问题的方法设计模式不是凭空想象出来的,是经验的积累和总结。设计模式不是一成不变的,而是在不断发展中的。对学习设计模式的推荐书籍:大话设计模式难得一遇的好书,用本书作者的说法来介绍:充满趣味性的技术

2020-07-21 14:56:46 77

原创 算法分析与设计学习笔记--7

回溯算法回溯法是一种组织搜索的一般技术,有“通用的解题法”之称,用它可以系统的搜索一个问题的所有解或任一解。有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。可以系统地搜索一个问题的所有解或任意解,既有系统性又有跳跃性。回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种以深度优先的方式系统地搜索问题的解的方...

2020-05-05 13:08:22 530

原创 算法分析与设计学习笔记---6

贪心题目二ZOJ1025-Wooden Sticks现有n根木棒,已知它们的长度和重量。要用一部木工机一根一根地加工这些木棒。该机器在加工过程中需要一定的准备时间,是用于清洗机器,调整工具和模版的。木工机需要的准备时间如下:(1)第一根木棒需要1min的准备时间;(2)在加工了一根长为l ,重为w的木棒之后,接着加工一根长为l ’ (l ≤ l’ ),重为 w’ ( w≤w’)的木棒是不...

2020-05-05 12:18:41 202

原创 算法分析与设计学习笔记--5

贪心算法在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。从贪心算法的定义可以看出,贪心算法不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一。...

2020-05-05 11:03:07 116

原创 算法分析与设计学习笔记--4

动态规划的基本思想动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。...

2020-05-05 10:54:18 216

原创 算法分析与设计学习笔记--3

分治法的设计思想

2020-05-05 10:17:36 194

原创 算法分析与设计学习笔记--2

递归递归不是一种算法分类,分治递推是算法分类,递归是一种编程的技术。分治法的设计思想是,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之。程序直接或间接调用自身的编程技巧称为递归算法。一个过程或函数在其定义或说明中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过...

2020-05-03 11:21:15 249

原创 算法分析与设计学习笔记---1

算法是什么:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。为什么学...

2020-05-02 18:27:39 715

原创 Python第三方库安装时遇到的问题

FirstYou should consider upgrading via the ‘python -m pip install --upgrade pip’ command.原因:按我的理解应该是需要升级pip这个工具需要升级解决方法:python -m pip install --upgrade pipSecondTraceback (most recent call last):...

2020-02-08 10:50:26 1834

原创 数据结构复习知识点整理

1.任何二叉树的叶子节点在前序中序后序遍历序列中的相对次序肯定不发生改变。(遍历:都是先左子树后右子树)2.哈夫曼树的节点只能是0或2度(经做题发现,哈夫曼树中每一层【除第一层】都是偶数个节点)3.强连通图、弱连通图(在有向图中如果对于每一对节点都有路径 ,则是强连通图)4.简单路径:路径上没有重复的点5.例题:无向图有16条边,度为4的顶点有三个,度为3的有四个,其余顶点的度均小于3,则...

2019-12-28 22:07:07 526 1

原创 图论学习续

最小生成树生成树的代价:设G=(V,E)是一个无向连通网,生成树上各边的权值之和称为该生成树的代价。最小生成树:在图G所有生成树中,代价最小的生成树称为最小生成树。最小生成树的概念可以应用到许多实际问题中。例:在n个城市之间建造通信网络,至少要架设n-1条通信线路。而每两个城市之间架设通信线路的造价是不一样的,那么如何设计才能使得总造价最小?假设G=(V, E)是一个无向连通网,U是顶...

2019-12-02 13:34:07 470

原创 图论学习

主要学习图的逻辑结构图的存储结构及实现图的连通性最小生成树最短路径AOV网与拓扑排序AOE网与关键路径图的逻辑结构图的定义图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G=(V,E)其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。在线性表中,元素个数可以为零,称为空表;在树中,结点个数可以为零,称为空树;在图中,顶点个数不能为零,但...

2019-12-02 13:12:41 350

原创 树和二叉树续

非递归后序遍历二叉树栈中的元素类型定义StackElement enum Tags{Left,Right}; //特征标识定义 template <class T> class StackElement //栈元素的定义 { public: BiTreeNode<T>* pointer; //指向二叉树结点的指针 Tags tag; //特征标识...

2019-12-02 00:06:01 136

原创 树和二叉树

要点树的逻辑结构树的存储结构二叉树的逻辑结构二叉树的存储结构及实现树、森林与二叉树的转换哈夫曼树

2019-12-01 23:22:26 104

原创 模板学习

1.模板:模板是对具有相同特性的函数或类的再抽象,是一种参数化的多态性工具。所谓参数化多态性,是指将程序所处理的对象的类型参数化,使一段程序代码可以用于处理多种不同类型的对象。采用模板编程,可以为各种逻辑功能相同而数据类型不同的程序提供一种代码共享的机制。在我的理解中,模板就是使用的不同类型的综合,用定义的“T”,来代替下面代码所要用的类型。模板也有分类:1、类模板2.函数模板。模板通过参数...

2019-11-27 23:43:29 227 1

原创 字符串和多维数组

字符串和多维数组主要的内容字符串存储模式匹配数组的逻辑结构特征数组的存储方式及寻址方法特殊矩阵和稀疏矩阵的压缩存储方法串的逻辑结构串:零个或多个字符组成的有限序列。串长度:串中所包含的字符个数。空串:长度为0的串,记为:" "。非空串通常记为:S=" s1 s2 …… sn "其中:S是串名,双引号是定界符,双引号引起来的部分是串值 ,si(1≤i≤n)是一个任意字符。...

2019-11-17 12:37:44 155

原创 学习队列心得

队列特殊线性表——队列队列的逻辑结构队列:只允许在一端进行插入操作,而另一端进行删除操作的线性表。空队列:不含任何数据元素的队列。允许插入(也称入队、进队)的一端称为队尾,允许删除(也称出队)的一端称为队头。和栈一样,队列(QUEUE)也是一种线性表,栈的特殊性在于先进后出,而队列的特性是先进先出,插入在一端,删除在另一端。就像排队一样,刚来的入队要排在队尾,每次出队的都是队首元素。...

2019-11-03 23:37:57 1964

原创 栈之心得

栈栈—是一种特殊的线性表栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈的特殊之处在于:仅在表尾进行插入和删除操作的线性...

2019-11-03 20:58:17 3496

原创 数据结构初学习之线性表

数据结构初学习之模板及线性表1.模板:模板是对具有相同特性的函数或类的再抽象,是一种参数化的多态性工具。所谓参数化多态性,是指将程序所处理的对象的类型参数化,使一段程序代码可以用于处理多种不同类型的对象。采用模板编程,可以为各种逻辑功能相同而数据类型不同的程序提供一种代码共享的机制。在我的理解中,模板就是使用的不同类型的综合,用定义的“T”,来代替下面代码所要用的类型。模板也有分类:1、类...

2019-09-29 01:49:27 172

原创 类学习之进修

类学习之进修在之前学习类的基础之上,在能够对类的学习有初步的认识之后,进行了进一步的拓展与联系,基础知识的掌握才是,想要进步的真正阶梯。在之前的类和对象学习中,对一些概念,如数据抽象、封装、struct、this指针、访问器修改器、友元、static成员、析构和构造函数都有相对的了解,在这一阶段的学习之后,这些概念得到运用并且能够在自己手中得到“升华”。这一阶段,非常重要的就是对STL(St...

2019-06-24 00:23:42 77

原创 感受软件开发之路

感受软件开发之路进入大一下学期之后,由之前的C语言学习转到C++的学习中来,并开始一步一步走向软件开发的道路,由一开始类的运用初体验,到后来重载运算符,再到继承与多态。一路下来不知不觉已经可以自己写出简单的解决生活中问题的小程序,进步的道路有不少的问题,一一解决之后,问题就成了自己的珍宝,是我们的上升的阶梯。对于自己的软件开发之路,有许多感受需要记录下来。在进行一个软件的创造时,不能急于求成。...

2019-06-24 00:21:59 134

空空如也

空空如也

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

TA关注的人

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