20172306 2018-2019 《程序设计与数据结构》第二周总结
20172306 2018-2019 《Java程序设计与数据结构》第二周学习总结
教材学习内容总结
- 第三章:集合概述-栈
- 3.1
- 集合是一种隐藏了实现细节的抽象。
- 就抽象而言,书中说,就像一些控制装置,它们隐藏了底层的细节,使我们可以控制一个非常复杂的机器。那么,我理解的就是,抽象就是很多细节我们使用者不需要知道,我们控制的是大范围的物品,其内部结构是由制造者掌握的。
- 抽象数据类型是一种在程序设计语言中尚未定义其值和操作的数据类型。(书中说,ADT对细节进行定义,但是这些对用户不可见,这体现的就是抽象)
- 数据结构是一种用于实现集合的编程结构集。我们可以利用线性数据结构来实现非线性集合。
- 3.2
- 栈的基本使用就是颠倒顺序,这和它后进先出的特性有关。
- 栈的一个本性——所有操作都是在一端进行的,因此,在中间或者底部删除、增添就很困难。(如果需要访问集合中间或者底部的元素,那么不适合栈作为数据结构)
- 3.3
- ArrayList可用于存储任意类型的对象的原因所在。因为所有对象都是与Object兼容的
- 3.7
- 当我们说到对象的数组时,其实说的是对象引用的数组。
- 3.8
- 方法重载:对于同一个类,如果这个类里面有两个或者多个重名的方法,但是方法的参数个数、类型、顺序至少有一个不一样,这时候局构成方法重载。作用是:方法重载就是对不同数据类型的的数据实现相似的操作
- 我们不可以实例化一个泛型对象,我认为原因是,我们无法确定是什么数据类型,所以无法据此进行实例化。
stack = (T[])(new Object[DEFAULT_CAPACITY];
这里的T就是类型参数,具体什么类型就来改变这个T
- 在练习中,我们自己编写了peek、isempty等的方法。那么我认为首先我们要保证容量是够用的。还有就是我们要正确看待索引值和数目的区别。
- 第四章:链式结构——栈
- 4.1
- 对象引用变量可以用来创建链式结构,链式结构是一种数据结构
- 对象引用变量存放的是对象的地址,表示对象在内存中的存储位置
- 在链表中存储的对象通常泛称为该链表的结点,注:需要一个单独的引用变量来表示链表的首结点,链表终止于其next引用为空的结点
- 4.2
- 对于管理链表时,进行删除和插入的方式的顺序是很重要的,如果不当,会将出现某段结点消失得情况
- 改变引用顺序是维护链表的关键
- 4.3
- 存储在集合中的对象不应该含有基本数据结构的任何实现细节
- 4.5
- 这一节是迷宫的类型。说明的是:可以用栈来模拟递归处理,以跟踪恰当的数据
- 4.6
- 这一章和第三丈很密切,因为这章是利用LinkedList来实现栈的操作。我看了这一节的代码,个人认为其实和ArrayList的非常的像,会一种另一种也就会了
教材学习中的问题和解决过程
- 问题1:上学期,我们也学习了抽象数据类型,但是上学期我了解的也不是很清楚,这里又出现了,而且说集合也是一种抽象,我就搞得不怎么懂。
- 问题1解决方案:我上网找了一些资料,我觉得用白话来理解就是:我们都知道有很多数据类型,而这种抽象数据类型,就是利用抽象的形式来表示不同的数据类型。使用它的人可以只关心它的逻辑特征,不需要了解它的存储方式。定义它的人同样不必要关心它如何存储。在我理解集合时,我认为就是我们需要考虑的是如何利用,其细节问题,我们可以不了解。这个词的概念其实都是比较模糊的,我觉得理解就好。
- 问题2:书中有句话说,如果pop或peek操作可以作用于空栈,那么栈的任何实现都要能抛出一个异常。我对这句话不是特别理解
- 问题2解决方案:我个人认为,这句话的意思是pop是从栈中出来一个元素,peek是取栈顶的元素,如果是空栈,那么我们取出来的都会为空,这是不符合规则的,所以如果pop或peek可以作用于空栈,那么我们在利用栈的时候,就要考虑栈空的情况,因此,我们在编程的时候,就要考虑空栈时候的异常。
- 问题3:对于ArrayList和LinkedList还是不够系统的认识
- 问题3解决方案:对于该问题,最开始我觉得我分的不是特别清,因为两者都是list接口的实现类,还有就是尽管一个是数组,一个是链表,但是两者都可以实现堆栈的操作,其实区分不是特别大。我上网上找了一些资料,知道了,虽然两者区别不算明显,但是有时可根据我们的需要进行选择。对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好,因为LinkedList是链表,要一个一个找,会耗时间;在进行insert和remove动作时在效率上LinkedList要好得多,因为 ArrayList是使用数组实现的,若要从数组中删除或插入某一个对象,需要移动后段的数组元素,从而会重新调整索引顺序,调整索引顺序会消耗一定的时间,所以速度上就会比LinkedList要慢许多. 相反,LinkedList是使用链表实现的,若要从链表中删除或插入某一个对象,只需要改变前后对象的引用即可
代码调试中的问题和解决过程
-
(对于PP3.2和PP3.8我觉得两者十分的相似,搞会其中一个,就会另一个了,只不过就是编一个类而已)
-
问题1:我在做PP3.2的时候,出现了问题
-
问题1解决方案:,我认为这里的arraystack.size()是我输入的这个数组的长度,但是结果只出现了三个字符,我以为是我的范围有问题就改了一下但是结果是相同的,而且可以看到,数组的长度是对的。后来我就将arraystack.size()改成了l,发现是正确的了。
-
问题2:在蓝墨云的练习作业中,我按照老师上课讲的模式来编写的,但是它要求是用户输入数字,我就参考了第三章的PostfixTester的示例,但是运行时出现这种问题无论是y还是n都无法停止,
-
问题2解决方案:我就单步调试了一下,知道了问题出在这里
-
问题3:还是上面的作业,又出现新的问题它输出的都只有第一个输入的数字。
-
问题3解决方案:我同样的单步调试,我觉得是我插入的问题,后来发现是自己当时没注意写错了
20172306码云链接
对于Android中的PP3.9,我没传到码云,但是表示做了
上周考试错题总结
- 错题1:
- 错题解析:这题的翻译是:关于高质量软件开发的技术和理论的学科是电气工程,electrical engineering.是电气工程的意思,而该句话正确的是软件工程,即Software Engineering.
- 错题2:
- 错题解析:这题翻译是:健壮性的可以很好地处理问题。这个我理解没到位,后来看书,发现,有句话是这样写的:一个健壮的系统可以完美第地处理各种问题。
- 错题3:
- 错题解析:这题错在没有很好地掌握那个阶次的图,没分清。
结对及互评
点评模板:
- 博客中值得学习的或问题:
- 对于教材的总结很认真
- 代码中值得学习的或问题:
- 他对于细节方面更关心,更细致。
点评过的同学博客和代码
- 本周结对学习情况
- 20172325
- 结对学习内容
- 一起学习了第三章和第四章的内容
- 一起尝试编写留的作业
其他
这两章有对之前内容的回顾,而且更加系统的解释了栈。我之前也学过,对数组和链表有印象,但是不是很懂,之前听得不好,这次仔细学习了下,终于弄懂这个逻辑了,这也算是我的收获,但是编程的时候,还是很懵,有时候不知道怎么开始,还是要继续努力滴!!!
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 6/6 | |
第二周 | 985/985 | 1/1 | 18/24 |
参考资料
- 《程序设计与数据结构》
- 抽象数据类型
- 方法重载
- ArrayList和LinkedList区别