20182327 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结
2019-11-03 16:18 BBIowa 阅读(176) 评论(1) 编辑 收藏 举报20182327 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结
教材学习内容总结
- 1、算法、栈、队列
- 2、算法优略可由增长函数判定。
- 3、分为时间和空间,时间只看最大位。
- 4、后缀表达式:有数字和符号计算。遇到数字将其放入栈顶。遇到符号就将栈顶- 5、两个数用符号操作。栈顶为被操作数。
- 6、栈的类型不定可以用泛型,即不确定类型,到实例化时再确定类型。
- 7、栈是可以通过集合实现的,top在初始化是为0,之后会变成栈顶的+1.
- 8、ADT接口,可以通过接口来实现栈。
- 9、栈有异常:1.入栈容量不够 2.出栈时栈空 3.扫描完栈中值多于1
- 10、pop,peek,push等方法编写类
- 11、队列与栈核心思想类似,是先进先出
- 12、 查找算法的总结
- 线性查找,通过依次遍历所要查找元素的集合,比较是否存在所需查找的元素,直到找到该元素或返回false表明集合不存在该元素。实现较为简单,但当集合元素数量巨大时,效率极慢。
-
- 二分法查找,通过每次将集合分为两部分,比较所需查找的元素位于中间元素的左半区还是右半区,依次进行二分,直至找到元素,或返回false。效率较高,例如,一个含义一百万元素的集合,只需20次左右即可完成查找。但二分法的实现需要基于一个有序数组,否则无法实现。 - 13、排序算法的总结
- 顺序排序——选择排序法,选择排序法每遍历列表依次,找到当前最小元素,将其与列表左侧元素交换,最终将所有元素进行排序。
-
- 顺序排序——插入排序法,从最左侧元素开始,与其余元素比较,产生一个初步的排序子集,每当下一个比较的元素小于排序子集的最右元素时,经过与子集元素比较,将其插入到子集的顺序位置。子集不断向右与剩余元素进行比较,直至完成排序。
-
- 顺序排序——冒泡排序,将列表中的元素,从左端开始,两个元素比较大小,若左大右小,两个交换位置,一直往复,将最大元素置于最右位置。每次排序都将当前最大的交换到最右
- 快速排序,使用递归的思想。以一个元素为界限,小在左,大在右。然后在进行递归,左右继续刚才的流程。直到完成排序。其思想与查找中的二分法类似,每次分为两部分,进行排序。从而提高效率。
教材学习中的问题和解决过程
-
问题1:<T extends Comparable<? super T>>
-
解答:
首先,表示泛型参数应用于该方法,但是,泛型方法并不意味着返回一个泛型数据,而是经过编译器判断后,返回一个具体的数据类型的数据。结合起来,整体意识就为,该方法适用于继承了Comparable借口的T方法,其中该参数继承了泛型类型,但其具体数据类型不明。 -
问题2:类的派生代表什么关系?
-
问题2解决方案:继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力,是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
代码调试中的问题和解决过程
- 问题一:构建getRight()方法
- 问题一解决方法:在BTNode里面就提供了getRight()方法,在这里只需要判断root是否为空就可以了
public LinkedBinaryTree
if (root == null)
return null;
else {
LinkedBinaryTree<T> result = new LinkedBinaryTree<T>();
result.root = root.getRight();
return result;
}
}
-
问题二:类型不能转换
-
问题二解决方法:public LinkedBinaryTree
getRight() { if (root == null) return null; else { LinkedBinaryTree<T> result = new LinkedBinaryTree<T>(); result.root = root.getRight(); return result; }
}
-
问题3:如何解决空间不足的问题
-
问题3解决方案:可以直接引用ArrayList中的expandCapacity()
private void expandCapacity() {
T[] larger = (T[]) (new Object[tree.length * 2]);
for (int index = 0; index < tree.length; index++)
larger[index] = tree[index];
tree = larger;
}
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
未考试
结对及互评
评分标准
-
正确使用Markdown语法(加1分):
- 不使用Markdown不加分
- 有语法错误的不加分(链接打不开,表格不对,列表不正确...)
- 排版混乱的不加分
-
模板中的要素齐全(加1分)
- 缺少“教材学习中的问题和解决过程”的不加分
- 缺少“代码调试中的问题和解决过程”的不加分
- 代码托管不能打开的不加分
- 缺少“结对及互评”的不能打开的不加分
- 缺少“上周考试错题总结”的不能加分
- 缺少“进度条”的不能加分
- 缺少“参考资料”的不能加分
-
教材学习中的问题和解决过程, 一个问题加1分
-
代码调试中的问题和解决过程, 一个问题加1分
-
本周有效代码超过300分行的(加2分)
- 一周提交次数少于20次的不加分
-
其他加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进情况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深入的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习情况真实可信的加1分
-
扣分:
- 有抄袭的扣至0分
- 代码作弊的扣至0分
- 迟交作业的扣至0分
点评模板:
-
博客中值得学习的或问题:
- 同学们已经有意识的遇见错误就截图,给后面写博客的各种方便很多,我一直忘记只能重新敲一遍。
-
代码中值得学习的或问题:
- 条条大路通罗马,好多同学可以曲线思维弄出代码,听他们讲解后真的很佩服。
-
基于评分标准,我给本博客打分:11分。得分情况如下:正确使用Markdown语法+1.教材学习中的问题和解决过程+2.代码调试中的问题和解决过程+2.感想,体会不假大空+1.错题学习深入+1.点评认真,能指出博客和代码中的问题+1.结对学习情况真实可信+1.课后题有验证+1,进度条有记录+1.
点评过的同学博客和代码
其他(感悟、思考等,可选)
- 每节课的考试让我十分吃不消,不只是英语单方面的问题,Java也有许多问题亟待解决,因为课本版本不同,找起知识点来比较麻烦。
- 好多同学好牛,自己好菜,各种把打好的代码推翻重来,参考别人代码改来改去把自己的程序变成了四不像,运行不了,本周更加熟悉了运行一个目的堆了四五个程序的Java常态,继续虚心学习吧。
- 实验作业越来越难,我越来越菜,随时gg。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 350/500 | 2/4 | 24/38 | |
第三周 | 512/1000 | 3/7 | 22/60 | |
第四周 | 1158/1300 | 4/9 | 35/90 | |
第五周 | 2905/3000 | 6/5 | 24/24 | |
第六周 | 3927/4000 | 2/2 | 26/30 | |
第七周 | 9041/6000 | 3/4 | 30/50 |