20172327 2018-2019-1 《程序设计与数据结构》第二周学习总结
教材学习内容总结
第三章 集合概述——栈
1.集合是一种汇集、组织了其余对象的对象。
2.集合中的元素一般是按照它们添加到集合的顺序,或者是按元素之间的某种内在关系来组织的。
3.集合分为线性集合和非线性集合,集合元素之间的联系能够由添加到集合的次序以及元素之间的内在关系所决定。
4.集合是一种隐藏了实现细节的抽象,设计良好的接口隐藏了集合的实现。
5.对象的内部工做对系统其余部分而言是被封装的。
6.数据类型是一组值及做用于这些数值上的各类操做。
7.抽象数据类型(ADT)是一种在程序设计语言中还没有定义其值和操做的数据类型。
8.数据结构是一种用于实现集合的编程结构集。
9.Java集合API是一个类集,表示一些特定类型的集合,这些类的实现方式各不相同。
1.栈是一种线性集合,遵循后进先出的原则。
2.
| 操做 | 描述 |
| -------- | :------------------------------------------: |
| push | 添加一个元素到栈的顶部 |
| pop | 从栈的顶部移除一个元素 |
| peek | 查看栈顶部的元素 |
| isempty | 肯定栈是否为空 |
| size | 肯定栈的元素数目 |
3.栈的全部操做都是在一端进行的。html
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){git
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.二、PP3.八、PP3.九、PP4.2
其余(感悟、思考等,可选)
这周学的有点麻烦,栈还行,就是链表有点糊涂。学习
学习进度条
目标 |
5000行 |
30篇 |
400小时 |
|
第一周 |
0/0 |
1/1 |
8/8 |
|
第二周 |
1306/1306 |
1/2 |
20/22 |
|
参考:软件工程软件的估计为何这么难,软件工程 估计方法编码
计划学习时间:10小时spa
实际学习时间:8小时
改进状况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)
参考资料