可爱的坏人

 

20172327 2018-2019-1 《程序设计与数据结构》第二周学习总结

20172327 2018-2019-1 《程序设计与数据结构》第二周学习总结

教材学习内容总结

第三章 集合概述——栈

集合


1.集合是一种聚集、组织了其他对象的对象。

2.集合中的元素通常是按照它们添加到集合的顺序,或者是按元素之间的某种内在关系来组织的。

3.集合分为线性集合和非线性集合,集合元素之间的联系可以由添加到集合的次序以及元素之间的内在关系所决定。

4.集合是一种隐藏了实现细节的抽象,设计良好的接口隐藏了集合的实现。

5.对象的内部工作对系统其他部分而言是被封装的。

6.数据类型是一组值及作用于这些数值上的各种操作。

7.抽象数据类型(ADT)是一种在程序设计语言中尚未定义其值和操作的数据类型。

8.数据结构是一种用于实现集合的编程结构集。

9.Java集合API是一个类集,表示一些特定类型的集合,这些类的实现方式各不相同。

栈集合


1.栈是一种线性集合,遵循后进先出的原则。

2.

操作 描述
push 添加一个元素到栈的顶部
pop 从栈的顶部移除一个元素
peek 查看栈顶部的元素
isempty 确定栈是否为空
size 确定栈的元素数目


3.栈的所有操作都是在一端进行的。

主要面向对象概念


1.类型兼容性:把一个对象赋给引用的特定赋值是否合法。类型检查:Java会自动在编译时标记出不合法的赋值。

2.可利用继承和多态来创建可以储存任意类型的对象的集合。

3.泛型:定义一个类,可以储存、操作和管理一些实例化之前没有制定类型的对象。

使用栈计算后缀表达式


1.栈是计算后缀表达式的理性数据结构。

第四章 链式结构——栈

链表作为引用


1.对象引用变量可以用来创建链式结构。

2.在链表中储存的对象泛称为该链表的结点。

3.链表由一些对象构成,其中每个对象指向了链表中下一个对象。

4.在Java语言中,所有动态创建的对象都来自于一个名为系统堆或自由储存的内存区。

管理链表


1.访问元素:唯一方法是从第一个元素开始,顺着该链表往下进行。

2.插入结点: 结点可以插入到链表的前端,中间和后端,改变引用顺序是维护链表的关键。

3.删除结点:不管删除哪个结点,都要保证链表的完整性。

无链接的元素


1. 储存在集合中的对象不应该含有基本数据结构的任何实现细节。

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

  • 问题1:队列、链表和堆栈三者的问题
  • 分析:队列和堆栈是两个类似链表的线性数据结构,但在使用时有更多的限制。对于一般的链表,可以通过链表的任意位置插入和删除节点进行修改,但是队列只能在一端加入节点(入队)(入栈),在另一端一处节点(出队)(出栈),因此队列是先进先出(FIFO)数据结构,堆栈是后进先出(LIFO)数据结构。

上周考试错题总结

  • Which of the following is a goal of software engineering?
    A .Solve the right problem
    B .Deliver a high-quality solution
    C .Deliver a solution on time and budget
    D .All of the above
解答:
软件工程的目标:
解决正确性问题
按时且在预算之内给出解决方案
给出高质量的解决方案。
以合情合理的方式完成上面的事情
所以以上题目前三个都属于,所以选D
  • An efficient system handles problems gracefully
    A .True
    B .Flase
解答:高效的系统用户与系统之间的交互必须优良,对于错误有预防和恢复的能力。
  • Software systems need only to work to support the work of developers, maintainers, and users.
    A .True
    B .Flase
解答:软件系统必须经过细心设计、编码和文档说明,以便为开发人员、维护人员和用户的工作提供支持。
  • Software must make efficient use of resources such as CPU time and memory.
    A .True
    B .Flase
解答:软件必须高效地使用诸如CPU时间和储存器之类的资源。
  • A stack can be used to preserve the order of a set of data.
    A .True
    B .Flase
解答:堆栈那无法保留一组数据的顺序,队列可以
  • The following code segment has ______ time complexity?

for(int i = 0; i < n; i++){

for(int j = 0; j < n: j=j*2){

 int val = (j*i);

 System.out.println(val)

}

}
A .O(1)
B .O(n)
C .O(n2)
D .O(nlogn)

解答:这个是嵌套循环,内层循环的循环次数是log2(n),外层循环的循环次数是n,所以增长函数为:F(n)=n·log2(n)
      又因为阶数与增长函数的最高阶项有关,所以忽略次项与常数项。所以阶次为O(n·log2(n))。
  • Which of the following has the smallest time complexity?
    A .3n+5+2n
    B .logn+2
    C .3n+4
    D .nlogn
解答:这题眼花点错了,我也不知道该怎么改,正确答案是C。
  • A growth function shows time or space utilization relative to the problem size.
    A .True
    B .Flase
解答:增长函数表示与该问题大小相对应的时间或空间的使用。 

代码托管

结对及互评

基于评分标准,我给李楠的博客打分:7分。得分情况如下:
正确使用Markdown语法(加1分)
模板中的要素齐全(加1分)
教材学习中的问题和解决过程, (加3分)
代码调试中的问题和解决过程, 无问题
感想,体会真切的(加1分)
点评认真,能指出博客和代码中的问题的(加1分)

  • 20172317

  • 20172320

    • 结对学习内容
      • 教材第3章,教材第4章
      • 完成课后自测题,并参考答案学习
      • 完成课后练习题
      • 完成程序设计项目:至少完成PP3.2、PP3.8、PP3.9、PP4.2

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

这周学的有点麻烦,栈还行,就是链表有点糊涂。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 8/8
第二周 1306/1306 1/2 20/22

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

  • 计划学习时间:10小时

  • 实际学习时间:8小时

  • 改进情况:

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

参考资料

posted on 2018-09-18 22:11  可爱的坏人  阅读(172)  评论(1编辑  收藏  举报

导航