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

时间:2021-05-15 10:27:43

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

教材学习内容总结

第13章 集合

- .集合与数据结构:


1.集合是一种对象,类似于保存其他对象的存储库。

2.集合的同构和异构:同构意味着这种集合保存类型全部相同的对象,异构可以保存各种类型的对象。

3.分离接口和实现:抽象数据类型(ADT)是由数据和在该数据上所实施的具体操作构成的集合。一个ADT有名称、值域和一组允许执行的操作。对象具有定义良好的接口,从而成为一种实现集合的完整机制。

4.根据对象的定义,对象本身具有定义良好的接口,接口的实现就隐含在类中,表达数据的方式和管理数据的操作都封装在对象中。由于对象与软件系统其他组成部分的交互收到有效控制,因此这种类型的对象可复用并且可靠。

- 数据结构的动态表示:


1.一个动态数据结构用链来实现,利用对象引用作为连接对象之间的链,就可以建立起适用于各种情况的数据结构。按这种方式建立的数据结构具有动态性,因为其大小是在使用时动态确定的,而不是在声明时静态确定的。

2.动态结构:使同一个类的两个对象建立起关系,用第一个对象的引用变量指向下一个对象,然后再让第二个对象的引用变量指向第三个对象,以此类推,最后建立起一个链表。

3.动态链表的链接:书上的MagazineRack、MagazineList例子很好的阐述了。

4.其他的动态列表:动态列表有许多不同的实现,例如可以用双向链表实现方案,或者以有序的方式实现方案。如果采用一些较复杂的数据结构能够使一些基本的公共操作更为有效,那么维护复杂数据结构所带来的额外开销是值得的。

- 线性数据结构:


1.线性结构是n个数据元素的有限序列。线性数据结构是顺序表在计算机内存中以数组的形式保存的线性表,是指用一组地址连续的存储单元依次存储数据元素的线性结构。例如:列表、队列、堆栈

2.队列:队列是一种以先进先出方式(FIFO)管理数据的线性数据结构。

3.堆栈:堆栈是一种以后进先出方式(LIFO)管理数据的线性数据结构。

- 非线性数据结构:


1.有些数据结构以非线性方式组织数据,因而称为非线性数据结构。例如:树和图。

2.树:树是一个非线性数据结构,由一个根节点和构成层次结构的多个节点组成。除根节点外的所有节点称为内部节点,没有子节点的节点称为叶节点。根节点在顶层,叶节点在底层。二叉树和树的操作有所不同。

3.图:图没有类似于树根节点那样的初始入口点。在一个图中,一个节点到另一个节点的连接称为边,连接一个图内各节点的边数一般没有限制。

- 异常的传递:

1.Java集合类API是Java标准类库中的一组类,代表不同类型的集合体,如ArrayList和LinkedList。

2.泛型对象是一种集合类对象,实现泛型对象是为了其管理的对象的类型在某个集合类建立时也被创建,这样就允许编译时能控制一些加入到该集合中的对象的类型,减少这些对象从该集合清除时的类型转换处理。Java集合类API的定义的类为泛型。

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

  • 问题1:递归与迭代的关系与区别?
  • 问题1解决方案:


1: 使用递归要注意的有两点:

1)递归就是在过程或函数里面调用自身;
2)在使用递归时,必须有一个明确的递归结束条件,称为递归出口.


2:递归分为两个阶段:

1)递推:把复杂的问题的求解推到比原问题简单一些的问题的求解;

2)回归:当获得最简单的情况后,逐步返回,依次得到复杂的解.


迭代:利用变量的原值推算出变量的一个新值.如果递归是自己调用自己的话,迭代就是A不停的调用B.

递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换.能用迭代的不用递归,递归调用函数,浪费空间,并且递归太深容易造成堆栈的溢出.

  • 问题2:字节流和字符流到底是什么?为什么在I/O异常这节提到了?定义在java.io包中的那么多方法都怎么系统的理解?
  • 问题2解决方案:
区别

实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件![](https://images2018.cnblogs.com/blog/1333119/201805/1333119-20180517191455594-1618495632.jpg)
程序运行后会发现文件中没有任何内容,这是因为字符流操作时使用了缓冲区,而 在关闭字符流时会强制性地将缓冲区中的内容进行输出,但是如果程序没有关闭,则缓冲区中的内容是无法输出的,所以得出结论:字符流使用了缓冲区,而字节流没有使用缓冲区。

在java.io包中操作文件内容的主要有两大类:字节流、字符流,两类都分为输入和输出操作。在字节流中输出数据主要是使用OutputStream完成,输入使的是InputStream,在字符流中输出主要是使用Writer类完成,输入流主要使用Reader类完成。(这四个都是抽象类)。

上周考试错题总结

  • 第一题:Which of the following is not true of the RuntimeExceptions class?
    A .All RuntimeExceptions throw checked exceptions
    B .All RuntimeExceptions are Throwable objects
    C .RuntimeException has child classes ArithmeticException and NullPointerException
    D .RuntimeException objects are not Error objects
    E .All of the above are true
  • 分析:运行时异常是可抛出的对象,并不是错误类的一部分,而两种类型的runtimeexception是算术异常和NullPointerException。不属于运行时异常的异常包括各种检查异常,但运行时异常不被检查异常。
  • 第二题:The term "exception propagation" means
    A .an exception is caught by the first catch clause
    B .an exception not caught by the first catch clause is caught by an outer (enclosing) catch clause
    C .exceptions are caught, sequentially, by catch clauses in the current try block
    D .exceptions always are caught by the outermost try block
    E .none of the above
  • 分析:异常传播意味着一个异常被匹配的catch子句在当前try块级别,如果没有匹配,然后在下一个封闭try块级别,等等,直到异常已经被匹配的条款或异常的主程序和被Java虚拟机。

  • 第三题:In order to define a keyboard input object, keyboard, you could use the instruction:
    BufferedReader keyboard = new BufferedReader(System.in);
    A .true
    B .false
  • 分析:一个BufferedReader对象必须用Reader对象构建。系统。in是一个输入流对象。为了使用上述定义,必须将BufferedReader构造函数中的对象更改为(新的InputStreamReader(System.in))。一份法律声明。

代码托管

点评过的同学博客和代码

  • 本周结对学习情况
    • [20172317]
    • 20172320

    • 结对学习内容
    • 教材第11,12章
    • 阅读11.1-11.6、12.1-12.3章节
    • 完成课后自测题,并参考答案学习
    • 完成课后练习题
    • 完成程序设计项目:至少完成PP11.1、PP11.2、PP12.1、PP12.9

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

概念很多,嘚仔细看,有很多细节,和前面的章节联系紧密。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 95/95 1/1 18/18
第二周 515/620 1/2 22/40
第三周 290/910 1/3 20/60
第四周 1741/2651 1/4 30/84
第五周 579/3230 1/5 20/104
第六周 599/3829 2/8 18/122
第七周 732/4561 2/9 24/146
第八周 1354/5915 2/11 30/176
第九周 不知为啥,代码无缘无故少了300行,我现在很迷

参考:软件工程软件的估计为什么这么难软件工程 估计方法

  • 计划学习时间:30小时

  • 实际学习时间:30小时

  • 改进情况:无

(有空多看看现代软件工程 课件
软件工程师能力自我评价表
)

参考资料