20172310 2017-2018《程序设计与数据结构》(下)第四周学习总结

Posted qiuxia2017

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20172310 2017-2018《程序设计与数据结构》(下)第四周学习总结相关的知识,希望对你有一定的参考价值。

学号 2017-2018-2 《程序设计与数据结构》第四周学习总结

教材学习内容总结

第六章主要研究了列表的概念以及某些管理列表的方法。

列表集合

  • 链表与列表集合之间的差别:链表是一种实现策略,使用引用来在对象之间创建链接。
    之前的学习中就使用了链表来分别实现栈和队列集合。 列表集合是种概念性表示法,
    其思想是使事物以线性列表的方式进行组织。
    就像栈和队列一样,列表也可以使用链表或数组来实现。
  • 列表集合没有内在的容量大小,它可以随着需要而增大。
  • 栈和队列都是线性结构,可以像列表那样进行思考,但其元素只能在末端添加和删除。列表集合更一般化,可以在列表的中间和末端添加和删除元素。
  • 列表集合的3种类型:
    • 有序列表(Cordered list), 其元素按照元素的某种内在特性进行排序。
    • 无序列表(unordered list),其元素间不具有内在顺序,元素按使用者所选择的任意方式排序。
    • 索引列表(indexed list), 其元素可以用数字索引来引用,维护一段连续的数字索引值。
  • 有序列表:列表基于某个关键值排序。对于任何已添加到有序表中的元素,只要给定了元素的关键值,同时列表已经
    定义了元素的所有关键值,那么它在列表中就会有一个固定的位置。
  • 无序列表:各元素的位置并不基于元素的任何内在特性。但列表中的元素仍是按照特殊顺序放置着,只不过这种顺序与元素
    本身无关。列表的使用者会决定元素的顺序。图6.2是一个无序列表的概念图。一个 新元素可以置于列表的前端或者末端,或者
    被插入到列表中某个特定元素之后。
  • 索引列表:各元素间也不存在能够决定它们在列表中的顺序的内在系。列表的使用者决定了元素的顺序。不过,除此以外,其
    每个元素都能够从一 个数字引值得到引用,该索引值从列表头开始从0连续增加直到列表末端。新的元素可以被添加到列表的任
    一位置, 包括列表的前端和末端。每自列表发生改变,索引值就相应调整以保持顺序和连续性。注意,索引列表和数组的根本区别在于:索引列表的索引值总是连续的。如果删除了或插入,其他的元素会进行位移,以消除间隙或腾出位置。

Java 集合API中的列表

  • Java集合API提供的列表类主要是支持索引列表。在一定程度上,这些类与无序列表是重叠的。
    然而,需要注意的是,Java API并没有任何类能直接实现以上描述的有序列表。
    ArrayList和LinkedList都实现了java.util.List 接口。
    技术分享图片

由Java API提供的列表的示例。

  • 使用无序列表:学习计划
  • 索引列表:Josephus问题(当列表中的事件不是按照顺序取出而是每隔i个元素提取,直到结束,如何找到这些事件的顺序)

列表ADT

  • 很多常见操作可以为所有类型的列表定义。这些操作之间的差别在于如何添加元素。
  • 有一些操作对有序列表和无序列表都是通用的。有序列表与无序列表之间的差别通常主要体现在往列表添加元素上。
  • 在有序列表中,只需指定要添加的新元素。该元素在列表中的位置取决于其键值。
  • 无序列表支持add操作的3个变体。可以把元素添加到列表的前端、末端或是列表中某个已有元素的后面。
    技术分享图片

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

  • 问题1:设计要点

某个列表是否可以既是有序列表,又是索引列表?可能,但没有什么意义。如果某个列表既是有序列表,又是索引列表,那么,如果客户应用程序试图在某个索引处添加一一个元素,或者修改了某个索引处的元素(这样该元素就不在正确的顺序位置了),情况会怎么样?哪个规则的优先级更高,索引位置还是顺序?

  • 问题1解决方案:XXXXXX
  • 问题2:最后,save和load方法分别用来把ProgramOfStudy对象写入个文件中, 以及从文件中读取它,(与在前面示例中看到的基于文本的IO操作不同,这里使用一个名 为串行化的过程,以二进制流的形式来读取和写入对象。因此,只需儿行代码,就可以把对象的当前状态存储起来。在这里意味着,当前存储在学习计划中的所有课程,都作为对象的一部分而存储。

注意,ProgramOsudy和Course类实现了Serializable 接口。为了是某个对象能使用串行化进行在储,其类必须实现Serializable.在Serializable接口中没有任何方法,它只是表明,该对象可以转控为串行化表示形式。ArrayList 和LmkedList类也实现了Serializable接口。

串行化

public class Course implements Serializable

表明该类可以被串行化对

Serializable接口不含有任何方法

  • 问题2解决方案:XXXXXX
  • ...

代码调试中的问题和解决过程

  • 问题1:技术分享图片

  • 问题1解决方案:XXXXXX
  • 问题2:XXXXXX
  • 问题2解决方案:XXXXXX
  • ...

代码托管

(statistics.sh脚本的运行结果截图)

上周考试错题总结

  • 错题1及原因,理解情况
  • 技术分享图片
  • 解析:题目的意思是公共特征应尽可能地位于类层次结构中的低层,尽量减少维护工作量。但是公共特征应该是放在父类,甚至更先的类中,而这些是类层次结构中的高层,主要是没有理解好类层次结构,才导致了这个题目的错误。

  • 错题2及原因,理解情况
  • ...

结对及互评

点评:

  • 博客中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 代码中值得学习的或问题:
    • xxx
    • xxx
    • ...
  • 本周结对学习情况
    • 结对同学学号1

    • 结对学习内容
      • 对实验一遇见的问题进行讨论
      • 教材第六章内容的共同学习
      • 第六章代码编写的讨论

点评过的同学博客和代码

我们的学习模式又回到了上个学期,又不断的提前在学习内容,其实课前预习是好的,但是我觉得博客的提交时间
可以放到这一章的课上完之后再提交,毕竟如果在上课之前我们就把所有的问题都写好了,时间有点紧,而且如果
是上完课,对自己教材问题的解答也会更加的清晰,所以我觉的可以在上一个博客完成之后放出下周学习的要求,
但是deadline可以定在上完课之后的一两天,这样就不会那么紧张,也能达到预习的效果。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
目标 5000行 30篇 400小时
第一周 0/0 1/1 10/10
第二周 326/326 1/2 18/28 学习在一点点的深入
第三周 784/1110 1/3 25/53

参考资料

以上是关于20172310 2017-2018《程序设计与数据结构》(下)第四周学习总结的主要内容,如果未能解决你的问题,请参考以下文章

2017-2018-2 20172310『Java程序设计』课程 结对编程练习_四则运算_第一周

20172310 2017-2018《程序设计与数据结构》(下)第三周学习总结

20172310 2017-2018《程序设计与数据结构》(下)第四周学习总结

20172310 2017-2018-2 《程序设计与数据结构》第十周学习总结

20172310 2017-2018-2 《程序设计与数据结构》第七周学习总结

20172310 2017-2018《程序设计与数据结构》(下)第七周学习总结