- 博客(42)
- 收藏
- 关注
原创 [C++程序设计笔记] 继承和多态学习总结
继承和多态是面向对象程序设计比较重要的特性。这些内容虽然在上学期的 Java 和本学期的设计模式课程中有所接触,但感觉还是缺乏练习,因而一些方面的机制还是没有弄得很透彻。这学期有了一点基础,理解起来就不是很难了,大概也就是加深了一下理解,顺便对 Java 和 C++ 在继承和多态这方面的异同点作了下区分。关于继承和多态,我目前的理解是对于代码的复用以及构建类与类之间的联系。在很多程序设计任务中,我们往往需要编写重复或者功能相同的类,这时候就能应用类的继承,减少代码的冗余,减少工作量。或者我们可以对看上去不
2020-05-20 16:07:22
296
原创 [C++程序设计] STL标准模板类库学习随笔
这段时间主要讲的是一些关于C++中STL类库的介绍和使用方法。虽然之前对于一些简单的STL类库中的方法诸如vector、映射以及迭代器的使用等略微有一些了解,以及上个学期写过一些java的集合类程序,但是在实现一个项目上还是感到有部分的困难。 关于这方面的内容需要完成的作业是写一个简单的图书馆后端管理程序。当时做作业的时候就想着这个任务可能比较难实现,在自主实现过程中也确实出现了许多的问题...
2020-04-28 18:38:33
279
原创 [设计模式笔记] 观察者模式(Observer Pattern)
观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新自己。 一个软件系统常常要求在某一个对象的状态发生变化的时候,某些其它的对象做出相应的改变。做到这一点的设计方案有很多,但是为了使系统能够易于复用,应该选择低耦合度的设计方案。 减少对象之间的耦合有利于系统的复用,但是同时设计师需要使这些低...
2020-04-23 11:59:34
198
原创 [设计模式笔记] 建造者模式(Builder Pattern)
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。对象性质的建造:有些情况下,**一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。**比如,一个电子邮件有发件人地址、收件人地址、主题、内容、附录等部分,而在最起码的收件人地址未被赋值之前,这个电子邮件不能发出。有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没...
2020-04-17 21:35:18
193
原创 [Processing] Processing 入门篇(0)
一、Processing 语言介绍Processing是一种具有革命前瞻性的新兴的计算机语言,它的概念是在电子艺术的环境下介绍程序语言,并将电子艺术的概念介绍给程序设计师。它是 Java 语言的延伸,并支持许多现有的 Java 语言架构,不过在语法 (syntax) 上简易许多,并具有许多贴心及人性化的设计。作为一种灵活的软件写生本,自 2001 年以来,Processing 促进了视觉艺术中的...
2020-04-16 22:27:58
391
原创 [设计模式笔记] 外观模式(Facade Pattern)
外部与一个子系统的通信必须通过一个统一的外观(Facade)对象进行。外观模式要求一个子系统的外部与其内部的通信必须通过一个统一的外观对象进行。外观模式提供一个高层次的接口,使得子系统更易于使用。外观模式的外观类将客户端与子系统的内部复杂性分隔开,使得客户端只需要与外观对象打交道,而不需要与子系统内部的很多对象打交道。结构:外观(Facade)角色:客户端可以调用这个角色的方法。此角色知...
2020-04-16 15:53:18
271
原创 [设计模式笔记] 模板方法模式(Template Method Pattern)
模板方法模式实际上时所有模式中最为常见的几个模式。定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式需要开发抽象类和具体子类的设计师之间的协作。一个设计师负责给出一个算法的轮廓和骨架另一些设计师则负责给出这个算法的各个逻辑步骤代表这些具体逻辑步骤的方法称作基本方法(primitive metho...
2020-04-13 16:47:35
120
原创 [设计模式笔记] 原型模式(Prototype Pattern)
通过给出一个原型对象来指明所需要创建的对象类型,然后用复制这个原型对象的办法创建出更多的同类型对象。Java中可以使用定义在Object类中的clone方法,需要实现克隆的类只需要实现java.lang.Cloneable接口即可。C#中可以使用 Clone() 方法实现原型模式。任何类,只要想支持克隆,必须实现C#中的 ICloneable 接口,该接口中有一Clone方法,可以在类中复写,...
2020-04-13 16:46:38
249
原创 [设计模式笔记] 工厂方法模式(Factory Method Pattern)
工厂方法(FactoryMethod)模式是类的创建模式,其用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中。在工厂方法模式中,核心的工厂类不在负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不接触哪一个产品类被实例化这种细节。这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。在Factory Method模式...
2020-04-13 16:45:32
116
原创 [设计模式笔记] 代理模式(Proxy Pattern)
代理(Proxy)模式给某一个对象提供一个替身或占位符,以控制对这个对象的访问。所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。应用:远程(Remote)代理:为一个位于不同的地址空间的对象提供一个局域代表对象。可以隐藏一个对象存在于不同地址空间的事实。这个不同的...
2020-04-13 16:44:36
96
原创 [设计模式笔记] 装饰模式(Decorator Pattern)
装饰模式常常被成为包裹模式,就是因为每一个具体装饰类都将下一个具体装饰类或者具体构建类包裹起来。抽象构建(Component)角色:给出一个抽象接口,以规范准备接受附加责任的对象。具体构件(Concrete Component)角色:实现组件对象接口,通常就是被装饰器装饰的对象。装饰(Decorate)角色:持有一个构建(Component)对象的实例,并定义一个与抽象构件接口一致的接口。...
2020-04-13 16:43:17
228
原创 [设计模式笔记] 常见对象设计原则
一、单一职责原则(Single Reaponsibility Principle , SRP)就一个类而言,应该仅有一个引起它变化的原因(职责)。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。难点在于如何区分职责、职责的粒度问题。软件设计真正要做的内容,就是...
2020-04-13 16:42:02
128
原创 [设计模式笔记] 策略模式(Strategy Pattern)
策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来。环境类负责维持和查询行为类,各种算法则在具体策略类(ConcreteStrategy)中提供。由于算法和环境独立开来,算法的增减、修改都不会影响环境和客户端。当出翔新的促销折扣或现有的折扣政策出现变化时...
2020-04-13 16:40:47
166
原创 [设计模式笔记] 简单工厂模式(Simple Factory Pattern)
简单工厂模式根据提供给它的数据,返回几个可能类中的一个类的实例。通常它返回的类都有一个公共的父类和公共的方法。工厂类角色Creator ( LightSimpleFactory ) :工厂类在客户端的直接控制下(Create方法)创建产品对象。抽象产品角色Product(Light):定义简单工厂创建的对象的父类或它们共同拥有的接口。可以是一个类、抽象类或接口。具体产品角色Concrete...
2020-04-13 16:38:50
143
原创 [算法笔记] 分治法
一、分治法概述一、分治法设计思想 将一个难以直接解决的大问题,划分成一些规模较小的子问题,以便各个击破,分而治之。更一般地说,将要求解的原问题划分成 kkk 个较小规模的子问题,对这 kkk 个子问题分别求解。如果子问题的规模仍然不够小,则再将每个子问题划分为 kkk 个规模更小的子问题,如此分解下去,直到问题规模足够小,很容易求出其解为止,再将子问题的解合并为一个更大规模的问题的解,自底向...
2020-04-12 20:55:00
895
原创 [算法笔记] 贪心算法
一、简介 在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。 从贪心算法的定义可以看出,贪心算法不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。 如果一个问题可以同时用几种方法解决,贪心算法应该是最好的...
2020-04-12 16:02:15
474
原创 [算法笔记] 浅析动态规划
一、动态规划的基本思想 动态规划算法通常用于求解某种具有最优性质的问题。 在这类问题中,可能会有许多可行解。每一个解都对应于一个值,目标是寻找最优解。 基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。 我们可以用一个表来记录所...
2020-04-11 16:57:57
287
原创 [C++程序设计] 从开学到现在的实际感想
从开学这两个月来,虽然因为疫情严重,全国人民都被迫待在家里自我隔离,但是这段在家的时间对于我个人而言也是一件颇为惬意的事情。整个城市都变得安静了下来,也正好是远离喧嚣好好反思的时候。在家上网课虽然也需要早起,但也不会感觉到学校里抢前排的紧张气息,倒也省下了一些精力翻翻书好好听课。进入正题。这几周听课的感觉还算不错。虽然是以前从来没有实施过的网课环境,但也能跟得上。在这期间系统地学习了C++...
2020-04-05 15:37:52
201
原创 [训练总结] ACM学习总结(九)
本次跟上周一样,做了一些动态规划的题。可能由于准备考试的原因,感觉进度需要放缓一下,需要等到考试后继续推进进度。
2019-12-08 23:03:54
299
原创 [训练报告] ACM学习总结(八)
这次因为备考复习,仅写了几道水题。感觉还是时间安排上出了问题,对于当前的考试比较有紧迫感。动态规划的内容比较多,虽然一时半会儿搞不定,但也不能拖太久。...
2019-12-04 23:14:51
123
原创 [训练报告] ACM学习总结(七)
本次主要做了些动态规划的习题,并且复习了一些之前的搜索的知识。这次感觉动态规划对本人而言算是一个比较困难点的地方了。简单的题目倒还好,一到有些题就只能去翻翻题解,试着去理解了。有时候做多了有些打击自信心,也就找找水题刷几道之后接着做了。动态规划第一次看的时候就比较困难,花了有一段时间算是能稍稍理解了那么一些。通过做DP中的一些相对而言比较简单的例题,我也对于简单动规有了点感觉。虽然暂时来说...
2019-12-01 20:58:10
131
原创 [训练报告] ACM训练总结(六)
这次做完了分治,写了一些广搜。关于广搜,之前也写了不少,这学期的数据结构课也用到了许多,应该来说算是相对熟练的了,也有了些写题的感觉。再接下来就是动态规划了。之前看的时候也比较困难,背包之类的就有好几种,状态转移方程写起来也不熟练。希望下次能多做点题搞懂吧。感觉看的东西还是不够多……沉下心慢慢练习吧。...
2019-11-27 23:14:01
115
原创 [训练报告] ACM训练总结(五)
这次写了一些关于分治的题目。感觉相比贪心更容易上手一些,可能是相对比较好想到?做完再看一遍书上的例题也是比较爽的。将一个大的问题划分为一个个容易解决的小的子问题,比较经典的例子就是归并算法了。感觉题目中需要求逆序对的还是很容易理解的2333接着往下看吧,之前耽误了一些时间,希望接下来效率能高一些吧。...
2019-11-24 21:38:48
135
原创 [数据结构笔记] 图
图的逻辑结构图的定义图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为: G=(V,E)其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。 在线性表中,元素个数可以为零,称为空表;在树中,结点个数可以为零,称为空树;在图中,顶点个数不能为零,但可以没有边。图的基本术语简单图:在图中,...
2019-11-24 17:18:28
368
原创 [训练报告] ACM训练总结(四)
这次终于把贪心算法的习题刷完了,期间也遇到了许多问题。有一些题目,一开始怎么想也想不出来,或者能想出一点来但也仅限于一点,离正解始终还有一段距离,等到看了题解才发现原来是这么做的,要是自己想的话也是大概率想不出来,感到与题解水平的差距也很大。那么怎么办呢?首先还是得多看题。一开始一定要自己动脑子想,如果想出来了可以先实现一下看一看。实在想不出来的话也没关系,上网上找一下题解,了解一下还有怎...
2019-11-20 22:16:33
140
原创 [训练总结] ACM学习总结(三)
本次把dfs的题刷完了,也水了一些贪心的题。有点小小的提升吧,虽然刷的题还是不够多,大概是最近做题没感觉吧……计划尽快把书上的题刷完,跟上以后的进阶内容。后面要加快速度了。...
2019-11-17 22:31:22
84
原创 [数据结构笔记] 线索二叉树
线索链表线索:将二叉链表中的空指针域指向前驱结点和后继结点的指针被称为线索;线索化:使二叉链表中结点的空链域存放其前驱或后继信息的过程称为线索化;线索二叉树:加上线索的二叉树称为线索二叉树。结点结构enum flag {Child, Thread}; template <class T>struct ThrNode{ T da...
2019-11-15 21:44:11
309
原创 [数据结构笔记] 最优二叉树
相关概念叶子结点的权值:对叶子结点赋予的一个有意义的数值量。二叉树的带权路径长度:设二叉树具有n个带权值的叶子结点,从根结点到各个叶子结点的路径长度与相应叶子结点权值的乘积之和。 记为::第k个叶子的权值:从根结点到第k个叶子的路径长度哈夫曼树:给定一组具有确定权值的叶子结点,带权路径长度最小的二叉树。例:给定4个叶子结点,其权值分别为{2,3,4,7},可以构造出形状...
2019-11-15 21:33:20
2180
原创 [数据结构笔记] 二叉树(三)
一、二叉树的建立设二叉树中的结点均为一个字符。假设扩展二叉树的前序遍历序列由键盘输入,root为指向根结点的指针,二叉链表的建立过程是:1. 按扩展前序遍历序列输入结点的值2.如果输入结点值为“#”,则建立一棵空的子树3.否则,根结点申请空间,将输入值写入数据域中,4. 以相同方法的创建根结点的左子树5.以相同的方法创建根结点的右子树template <clas...
2019-11-15 21:23:47
428
原创 [数据结构笔记] 二叉树(二)
(二)二叉树的遍历操作一、前序(根)遍历若二叉树为空,则空操作返回;否则:①访问根结点;②前序遍历根结点的左子树;③前序遍历根结点的右子树。前序遍历序列:A B D G C E F二、中序(根)遍历若二叉树为空,则空操作返回;否则:①中序遍历根结点的左子树;②访问根结点;③中序遍历根结点的右子树。中序遍历序列:D G B A E C F三、后...
2019-11-14 22:50:50
267
原创 [训练报告] ACM学习总结(二)
本次与上次一样,忙着刷了下书上的题。这段时间刷的题并不多,迫于最近的一些事情,只写了几道DFS的题,不过也起到了一定的巩固的效果。但是确实,这几天有点松懈了。再加上时间紧迫,有时候写一道题花的时间也挺长,所以还得需要在这上面投入更多的时间。接下来确实需要再挤出更多的时间写题了。...
2019-11-13 21:12:20
112
原创 [数据结构笔记] 二叉树(一)
(一)二叉树的逻辑结构一、二叉树的定义:二叉树是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。二、特点:⑴ 每个结点最多有两棵子树;⑵ 二叉树是有序的,其次序不能任意颠倒。注意:二叉树和树是两种树结构。三、二叉树的基本形态:四、特殊的二叉树斜树1 .所有结...
2019-11-13 13:43:27
157
原创 [数据结构笔记] 树
(一)树的逻辑结构一、树的定义树:n(n≥0)个结点的有限集合。当n=0时,称为空树;任意一棵非空树满足以下条件:⑴ 有且仅有一个特定的称为根的结点;⑵ 当n>1时,除根结点之外的其余结点被分成m(m>0)个互不相交的有限集合T1,T2,… ,Tm,其中每个集合又是一棵树,并称为这个根结点的子树。树的定义是采用递归方法。二、树的基本术语结点的度:结点所...
2019-11-12 12:47:18
189
原创 [训练报告] ACM学习总结(一)
本次没有学习新知识,只是复习了竞赛书上的知识并刷了一些题。迫于之前电脑坏了,一些没来得及提交的代码被清理,所以有一些题目算是重新做了一遍,当然这也没什么好损失的,算是一个巩固吧。本次复习了如下算法:1. 高精度算法2. 一些排序算法3. 递推4. 递归以及基本完成了上述所有内容的习题。通过刷题,也理解了这些算法与后续内容之间的联系,对之后内容的理解加深了一些。接...
2019-11-10 18:33:41
117
原创 [数据结构笔记] 队列
一、队列的逻辑结构队列:只允许在一段进行插入操作,而另一端进行删除操作的线性表。空队列:不含任何数据元素的队列。允许插入(也称入队、进队)的一端称为队尾,允许删除(也称出队)的一端成为队头。队列的操作特性:先进先出二、顺序队列的存储结构及实现确定不同的队空、队满的判定条件:方法一:附设一个存储队列中元素个数的变量num,当num=0时队空,当num=Queuesiz...
2019-11-06 17:49:12
518
原创 [数据结构笔记] 字符串
串的逻辑结构串:零个或多个字符组成的有限序列。串长度:串中所包含的字符个数。空串:长度为0的串,记为:" "。非空串通常记为: S=" s1 s2 …… sn "其中:S是串名,双引号是定界符,双引号引起来的部分是串值 ,si(1≤i≤n)是一个任意字符。子串:串中任意个连续的字符组成的子序列。主串:包含子串的串。子串的位置:子串的第一个字...
2019-11-06 14:41:58
180
原创 [数据结构笔记] 栈
一、栈的逻辑结构栈:限定仅在表尾进行插入和删除操作的线性表。空栈:不含任何数据元素的栈。 允许插入和删除的一端称为栈顶,另一端称为栈底。 示意图:二、顺序栈的存储结构及实现其中top为顺序栈栈顶指针。进栈操作:top++;出栈操作:top--;判断栈空:top==-1;栈满:top==MAXSIZE-1;顺序栈:const int ...
2019-11-03 22:04:05
252
原创 [数据结构笔记]链表
链表是线性表的链式存储结构的实现。链表所占用的内存并非连续的,需要通过指针依次连接。单链表单链表通常有两种形式:带头结点和不带头结点的单链表。相比较前者能够简化操作,便于实现。单链表实现template <typename T> struct Node { T data; Node<T> *next; //此处<T>也可以省略};在...
2019-10-28 19:42:56
214
原创 [数据结构笔记]顺序表
线性表的顺序存储结构称作顺序表,其基本思想是用一段地址连续的存储单元依次存储线性表中的数据元素。其中数组下标与数据元素的序号是一一对应的。一般需要分配固定长度的数组空间存储顺序表。一、顺序表的构造template <typename T>class Seqlist{ public: Seqlist(); Seqlist(T a[], ...
2019-10-28 18:27:48
258
原创 最小生成树算法——Kruskal算法
Kruskal算法是求加权连通图中最小生成树的算法。该算法将一个连通图中的边权从小到大排列,然后每次选取边权最小的点,用并查集将几个点合并成一个集合,直到找到第n-1条边为止。 该算法的时间复杂度主要取决于排列图中边权所使用的排序算法。 代码如下:bool cmp(const int x,const int y)//排序规则 { return w[i] < w[j];}int fi
2016-09-05 21:25:23
403
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人