20182327 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结
教材学习内容总结
- 一、算法、栈、队列
- 二、算法优略可由增加函数断定。
- 三、分为时间和空间,时间只看最大位。
- 四、后缀表达式:有数字和符号计算。遇到数字将其放入栈顶。遇到符号就将栈顶- 五、两个数用符号操做。栈顶为被操做数。
- 六、栈的类型不定能够用泛型,即不肯定类型,到实例化时再肯定类型。
- 七、栈是能够经过集合实现的,top在初始化是为0,以后会变成栈顶的+1.
- 八、ADT接口,能够经过接口来实现栈。
- 九、栈有异常:1.入栈容量不够 2.出栈时栈空 3.扫描完栈中值多于1
- 十、pop,peek,push等方法编写类
- 十一、队列与栈核心思想相似,是先进先出
- 十二、 查找算法的总结
- 线性查找,经过依次遍历所要查找元素的集合,比较是否存在所需查找的元素,直到找到该元素或返回false代表集合不存在该元素。实现较为简单,==但当集合元素数量巨大时,效率极慢==。
-
- 二分法查找,经过每次将集合分为两部分,比较所需查找的元素位于中间元素的左半区仍是右半区,依次进行二分,直至找到元素,或返回false。效率较高,例如,一个含义一百万元素的集合,只需20次左右便可完成查找。==但二分法的实现须要基于一个有序数组,不然没法实现。==
- 1三、排序算法的总结
- 顺序排序——选择排序法,选择排序法每遍历列表依次,找到当前最小元素,将其与列表左侧元素交换,最终将全部元素进行排序。
-
- 顺序排序——插入排序法,从最左侧元素开始,与其他元素比较,产生一个初步的排序子集,每当下一个比较的元素小于排序子集的最右元素时,通过与子集元素比较,将其插入到子集的顺序位置。子集不断向右与剩余元素进行比较,直至完成排序。
-
- 顺序排序——冒泡排序,将列表中的元素,从左端开始,两个元素比较大小,若左大右小,两个交换位置,一直往复,将最大元素置于最右位置。每次排序都将当前最大的交换到最右
- 快速排序,使用递归的思想。以一个元素为界限,小在左,大在右。而后在进行递归,左右继续刚才的流程。直到完成排序。其思想与查找中的二分法相似,每次分为两部分,进行排序。从而提升效率。
教材学习中的问题和解决过程
- 问题1:<T extends Comparable<? super T>>
解答:
首先,
表示泛型参数应用于该方法,可是,泛型方法并不意味着返回一个泛型数据,而是通过编译器判断后,返回一个具体的数据类型的数据。结合起来,总体意识就为,该方法适用于继承了Comparable借口的T方法,其中该参数继承了泛型类型,但其具体数据类型不明。
html
- 问题2:类的派生表明什么关系?
问题2解决方案:继承是从已有的类中派生出新的类,新的类能吸取已有类的数据属性和行为,并能扩展新的能力,是使用已存在的类的定义做为基础创建新类的技术,新类的定义能够增长新的数据或新的功能,也能够用父类的功能,但不能选择性地继承父类。git
代码调试中的问题和解决过程
- 问题一:构建getRight()方法
- 问题一解决方法:在BTNode里面就提供了getRight()方法,在这里只须要判断root是否为空就能够了
public LinkedBinaryTree
getRight() {
算法
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分code
代码调试中的问题和解决过程, 一个问题加1分
- 本周有效代码超过300分行的(加2分)
- 其余加分:
- 周五前发博客的加1分
- 感想,体会不假大空的加1分
- 排版精美的加一分
- 进度条中记录学习时间与改进状况的加1分
- 有动手写新代码的加1分
- 课后选择题有验证的加1分
- 代码Commit Message规范的加1分
- 错题学习深刻的加1分
- 点评认真,能指出博客和代码中的问题的加1分
- 结对学习状况真实可信的加1分
- 扣分:
- 有抄袭的扣至0分
- 代码做弊的扣至0分
- 迟交做业的扣至0分
点评模板:
点评过的同窗博客和代码
其余(感悟、思考等,可选)
- 每节课的考试让我十分吃不消,不仅是英语单方面的问题,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 |
参考资料