20162324 《程序设计与数据结构》第5周学习总结

20162324 2017-2018-1 《程序设计与数据结构》第5周学习总结

教材学习内容总结

1.Java Collections API的基本结构

2.Collection接口

Collection作为队列形式存储的集合的抽象接口 Collection 是一个被高度抽象出来的接口、提供基本的操作数据的行为、属性的定义、要求子类必须提供两个构造方法、一个无参构造方法、一个以另一个Collection为基础的构造方法。就像课本上所举的例子,这个是高度抽象出来的,就像一个汽车一样我们使用它的接口,并不会去详细了解他的所有的细节。我们主要了解的就是怎么应用好听的接口。
3. Collection实现的Java相关技术:继承/多态/泛型/接口;这些内容我们都有所了解,并且在以前的博客中有所提及:继承 多态 泛型

4.栈的应用:对于应用栈来说要应用好栈就要熟悉他的数据结构,在这一点上我们自己动手用数组和链表分别实现了栈的部分功能。
掌握栈的还是比较好的。
5.Java Stack API

6.链表由对象组成,其中每个对象指向下一个对象;链表根据需要动态变大,在本质上没有容量限制,如果容量有了上限,那可能就是物理内存耗尽。

教材学习中的问题和解决过程

  • 问题1:在课本中提及到的有关链表的管理时就提到了哨兵节点,但是没有详细的介绍对此我并没有搞清楚这是什么?
  • 问题1解决方案:我在网上搜索,在知乎上找到也另一个类次的问题,并且在仔细的阅读别人的回答之后我就更好的理解了哨兵。
    作者:hdyjzdj
    来源:知乎

哨兵,顾名思义,是用来解决国家之间边界问题的,不直接参与生产活动。同样,计算机科学中提到的哨兵,也用来解决边界问题。在许多算法中,存在“邻居依赖问题”(我自己造的词),在处理当前元素时,要涉及到它旁边那个元素。那如果当前元素是边界元素呢,它没有旁边那个元素,如果不作处理,程序就可能出错;如果对它特别对待,就会增加代码复杂性,还会降低程序效率。应用哨兵,也就是申请若干个多余的元素作为边界元素的邻居,可以完美得解决这个问题。下面,我们会举一些哨兵应用的例子。链表单链表在插入和删除时,需要修改前驱结点的后继指针,这就形成了“邻居依赖”,链表中第一个元素没有前驱结点,如果没有特殊处理,在插入和删除第一个结点时,就会出错。所以我们可以申请一个头结点,作为原本的第一个结点的前驱结点,问题也就解决了。但是在这种方式中,我们要插入或者删除一个结点时,要知道它的前驱结点地址,这往往是麻烦的。另一个方式,也是我更喜欢的方式,是申请一个尾结点,作为原本最后一个结点的后继结点。要删除某个元素时,我们不删除当前这个结点,而是用后继结点的数据覆盖当前结点的数据,再删除后继结点。这种方式,不需要访问前驱结点,也就解决了获取前驱结点的困难。插入元素也是同理。而最后一个结点没有后继结点,所以需要一个尾结点作为哨兵。如果用的是双链表,就需要在头尾各加一个哨兵。

代码托管

由于没有区分所以截图在第六周博客中给出

上周考试错题总结

  • 测试的结果还不知道

本周结对学习情况

- [20162312](博客链接)
- 结对照片
- 结对学习内容

    栈及其有关的知识点。

其他(感悟、思考等,可选)

写代码些三种代码,这是老师在上课时说的,并且在前个学期我们最主要关注的是怎么写产品代码,这个学期在不断地些代码的过程中我才发现测试代码的重要性基本上是你的产品di代码的医生,要做到对产品代码的'“望闻问切”。总之这三种代码缺一不可。而且在测试代码的时候要尽量的覆盖正常、异常的各种情况,来进一步的确认代码是正确的而不是随随便便的进行一些测试。
同时在生活中也是如此,在做一件事的时候就应该进行相应的检查,越早发现越好,不要到问题已经发展到不可解决的时候再想着去纠正可能已经来不及了。

学习进度条

由于第五周放假没有单独记录,将第四周、第五周的学习的进度都会在第六周的总结中一起体现。

  • 计划学习时间:18小时

  • 实际学习时间:14小时

  • 改进情况:
    这周由于运动会的队列训练,导致我平时是我时间安排一直被打乱,没有办法有序的。按计划进行自己的活动。

参考资料

posted on 2017-10-13 22:17  20162324-春旺  阅读(235)  评论(0编辑  收藏  举报

导航