第七周作业
20182313 2019-2020-1 《数据结构与面向对象程序设计》第七周学习总结
教材学习内容总结
- 算法分析,包括效率,方法调用、以及递归,主要用来比较不同算法之间效率的高低不同,增长函数显示了与问题大小相关的时间或空间利用率。即时间复杂度用于表示这个算法耗时的变化快慢。
- 嵌套循环的分析必须要考虑内层和外层循环的执行情况
- 栈是一种线性集合,遵循后进先出的原则。
- 类型兼容性:把一个对象赋给引用的特定赋值是否合法。类型检查:Java会自动在编译时标记出不合法的赋值。
- java接口定义了一组抽象方法,能用来将抽象数据类型概念与它的实现分开。
- 链表由对象组成,其中每个对象指向表中的下一个对象
- 链表根据需要动态变大,本质上没有容量限制。
- 实现带哨兵结点或虚位结点作为第一个结点的表,可以去掉处理第1个结点这种特殊情形
- 栈的链式实现方案在链表的一端添加和删除元素。
- 队列元素按FIFO的方式处理————最先进入的元素最先离开。
- 队列的链式实现方式便于找到指向链表中的第一个和最后一个元素的引用。
- 因为队列操作修改集合的两端,所以将一端固定在下标为0的位置就会让元素移动。
- 采用数组实现队列时,把数组看成一个环,可以避免移动元素。
教材学习中的问题和解决过程
- 问题一:环形数组实现过程中front引用和rear引用的相等问题?与队列的容量问题?如何判断队列已满?
- 问题一解决过程:整形变量front(head)和整形变量rear(tail)是从数组两端开始的索引值,当元素出队列,front的值要递减;当元素入队列,rear的值要递增。但是,在数组的最后一个单元时,该元素被删除后front的值重新回到0;填充该元素后rear的值重新回到0。所以,当该队列为空时均为0;该队列全满时均为最大容量。
- 问题二:关于dequeue操作复杂度的理解问题
- 问题二解决过程:由于队列的特殊性,enqueue操作与dequeue操作必须作用于队列的对立端。在链表的前端进行dequeue操作,在链表的末端进行enqueue操作时,设置一个临时变量指向头结点的next,处理的复杂度为O(1)。在链表的前端进行enqueue操作,在链表的末端进行dequeue操作时,由于需要遍历链表找到倒数第二个结点,其操作复杂度为O(n)。
代码调试过程中的问题和解决过程
- 问题一:队列开头的位置元素丢失,输出最后由原来的元素变为null
- 问题一解决过程:经过对代码的检查和顺序的修改,发现tostring和first两个方法的内容发生了冲突,,进行修改后得到预期输入
代码托管
上周考试课题总结
上周无考试
结对及互评
- 基于评分标准,我给本博客打分:15分 得分情况如下:
1.正确使用Markdown语法(加1分)
2.模板中的要素齐全(加1分)
3.教材学习中的问题和解决过程(加2分)
4.代码调试中的问题和解决过程(加3分)
5.感想,体会不假大空(加1分)
6.排版精美(加1分)
7.进度条中记录学习时间与改进情况(加1分)
8.有动手写新代码(加1分)
9.错题学习深入(加1分)
10.点评认真,能指出博客和代码中的问题(加1分)
11.结对学习情况真实可信(加1分)
12.本周有效代码超过300分行(加2分)
点评过的同学博客和代码
- 本周结对学习情况
20182306 - 结对学习内容
使用链表实现队列
队列、链表和堆栈三者的问题
用数组实现队列
感悟
这周投入许多时间研究安卓,但是也未收到明显成效,对于栈的理解还算马马虎虎,但是之后的队列,链表学习就有些问题,学起来有些费劲,需要课下多多落实。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 10000行 | 30篇 | 400小时 | |
第一周 | 171/171 | 2/2 | 20/20 | |
第二三周 | 415/586 | 3/5 | 42/62 | |
第四周 | 587/1173 | 2/7 | 22/84 | |
第五周 | 1706/2879 | 2/9 | 19/103 | |
第六周 | 1706/2879 | 2/9 | 19/103 | |
第七周 | 3969/6848 | 2/11 | 21/124 |