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

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

教材学习内容总结

  • 集合与数据结构
    • 集合是一种对象,类似于保存其他对象的存储库。我们常常用集合表示一个专门用于保存元素的对象,并且该对象还提供增添、删除等管理所保存元素的服务。

    • 集合分同构和异构

      同构:集合中保存的类型全部相同。

      异构:集合中可以保存全部的类型。

  • 数据结构的动态表示

    • 数组具有局限性,在存在期间具有固定的大小。动态数据结构的大小规模随需要增长和收缩。
    • 一个动态数据结构用链来实现,利用对象引用作为连接对象间的链。
  • 其他的动态列表

    • 双向链表
    • 头节点
  • 线性数据结构

    • 队列:队列是一种以先进先出方式管理数据的线性数据结构。

- 堆栈:堆栈是一种以后进先出方式管理数据的线性数据结构。

  • 非线性数据结构

    • 树:树是一个非线性数据结构,由一个根节点和构成层次结构的多个节点组成。除根节点外的所有节点称为内部节点,没有子节点的节点称为叶节点。
    • 图:图是 非线性数据结构,是用常见的编来连接节点。
  • java集合类API

    • 泛型:只一个集合所管理的对象的类型要在实例化给集合对象时才确定。

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

  • 问题1:ArrayList和LinkedList类的区别
  • 问题1解决方案:
    • ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构;

    • 对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;

    • 对于添加和删除操作add和remove,一般大家都会说LinkedList要比ArrayList快,因为ArrayList要移动数据。

  • 问题2:泛型是什么
  • 问题2解决方案:

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

  • 问题1:在进行pp13.3时,我先想的是在向链表里添加对象时就完成排序

但是它就是显示有错,然后我决定先不变加入对象的方法,等对象全部加进去了,在用一个方法进行排序,于是改编了之前写的一个向链表里插入的方法,可以把对象与其他进行比较,再插入到顺序位置,像这样

这样子已经可以实现了,但是再编写这个方法的时候,我发现之前报错的原因好像就是我进行比较的类型不对,于是我又想办法让在向链表里添加对象时就完成排序

很可惜还是又失败了

  • 问题1解决方案:最后我还是决定就用一个单独的方法进行排序,但是我再按Ctrl+z的时候多按了几下,不知道后退到哪步了(我简直要窒息了),又输不出东西了,最后照着那张不完整的截图,改了又改,大概可以输出这样了

代码托管

上周考试错题总结

  • 错题1及原因

The following method should return true if the int parameter is even and either positive or 0, and false otherwise. Which set of code should you use to replace ... so that the method works appropriately?
public boolean question3(int x) { ... }
A . if (x = = 0) return true;else if (x < 0) return false;else return question3(x - 1);
B . if (x = = 0) return false;else if (x < 0) return true;else return question3(x - 1);
C . if (x = = 0) return true;else if (x < 0) return false;else return question3(x - 2);
D . if (x = = 0) return false;else if (x < 0) return true;else return question3(x - 2);
E . return(x = = 0);
正确答案: C 你的答案: A
我当时想了好一会,本来想自己在idea上实验一下的,但是感觉时间不够了,就没有试,结果想错了。

  • 理解情况

该方法会递归地让自己从X-2,直到X=0或X<0。如果X=0,那么它X-2i==0或X=2i,所以X必须是偶数。否则,递归在X<0时结束,也就是说,原来的X是奇数或小于0

  • 错题2及原因

An infinite loop and an infinite recursion
A . are different because it is impossible to detect the latter, while it's quite easy to detect the former
B . both continue to repeat indefinitely
C . both will be caught by the compiler
D . both will be caught by the Java Virtual Machine during execution
E . none of the above
正确答案: B 你的答案: C
我当时依稀记得在哪里看到了他们两个应该是有些区别的,但是没有仔细去回想,就选了一个C

  • 理解情况

无限循环和递归都是相似的,因为它们会无限地重复。既不能被编译器捕获,也不能被运行时捕获。

  • 错题3及原因

We can define a list of int values recursively as: a list_item, followed by a comma, followed by a list where a list_item is any int value.
A . true
B . false
正确答案: B 你的答案: A
当时没觉得哪里不对,唉,太年轻。

  • 理解情况

递归定义不包含一个基例,使得INT值的所有列表都将无限长

  • 错题4及原因

The following method correctly adds two ints, returning their sum:

public int add(int a, int b)
{
return (b > 0) ? add(a+1, b-1) : a;
}
A . true
B . false
正确答案: B 你的答案: A
我当时没有考虑周全,下意识地感觉是对的

  • 理解情况

对于大于或等于零的INT,该加法方法是可以完成得;但如果B小于0,则该方法就会失败。

结对及互评

点评模板

  • 博客中值得学习的或问题:
    • 博客排版工整,界面很美观
    • 问题总结做得很全面
  • 代码中值得学习的或问题:
    • 想各种办学去解决问题

点评过的同学博客和代码

  • 本周结对学习情况
    • 20172324
    • 结对学习内容
      • 第十三章内容:集合

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

  • 挺好的,这本书终于学完了。
  • 最近两周的测试结果不好,看书的时候总觉得还行,做起测试来就很难受,有点烦躁。
  • 总之,人丑就要多读书嘛,这本书其实我的掌握还不是很牢固,还是需要多多复习的,要经常翻翻,温故而知新。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 189/189 1/1 18/18
第二周 250/439 1/2 21/39
第三周 437/876 2/4 25/64
第四周 459/1335 2/6 21/85
第五周 547/1882 1/7 20/115
第六周 592/2474 2/9 25/150
第七周 782/3256 1/10 29/179
第八周 830/4086 3/13 40/219
第九周 1300/5386 2/15 40/259
第九周 1000/6386 1/16 26/285

参考资料

原文地址:https://www.cnblogs.com/N-idhogg/p/9063994.html