20172306 2018-2019《程序设计与数据结构》第三次总结
20172306 2018-2019《Java程序设计与数据结构》第三周学习总结
教材学习内容总结
-
概述
-
队列元素是先进先出,从队列删除元素的顺序,与往队列放置元素的次序是一样的
-
在栈中,其处理过程只在栈的某一端进行;而在队列中,其处理过程可在队列的两端进行
-
| | 操作| 说明|
| -------- | :----------------😐:-----😐
| | enqueue | 向队列末端添加一个元素 | |
| | dequeue | 从队列前端删除一个元素 | |
| | first | 考察队列前端的那个元素 | |
| | isempty | 判定队列是否为空 | |
| | size | 判定队列中的元素数目 | |
| | toString |返回队列的字符串表示 | | -
enqueue、dequeue、和first等操作对应于栈的push、pop、peek等操作。队列中也没有操作能让用户“抵达”队列中部,同样也没有操作允许用户重组或删除多个元素。
-
JavaAPI中的队列
-
它提供了一个Queue接口,该接口定义了element方法,检索队列首部的元素,但不删除它。提供了add和offer两个方法(add可以确保队列含有给定的元素,若给定元素未添加在队列中,则抛出异常;offer把给定元素插入到队列中,如果插入成功,返回true,反之,返回false)。提供了poll和remove两个方法(当试图从一个空队列中删除一个元素时,发出异常;若队列为空,poll返回null,而remove抛出异常)。
-
使用队列:代码密钥
-
队列是一种可存储重复编码密钥的便利集合
-
队列的性质使得密钥值能保持正确的次序,不用担心何时抵达密钥末尾,该如何从头开始。
-
用链表和数组实现队列
-
对于这部分的内容,书中是利用短一点的代码还有图示进行分析,同时还用上了之前学习的复杂度,其实就是和之前学习的一个简单的集合。而就我来说,我觉得数组方面比较难,书中也说,由于队列操作会修改集合的两端,因此将一端固定于索引0处要求移动元素
-
固定数组实现策略在栈的实现中很高效,但是对于队列,我们是在其两端进行操作的,而顺序也不是无关紧要的了,因此,用固定数组来实现栈的效率不高。
-
把数组看作是环形的,可以除去在队列的数组实现中把元素移位的需要。
教材学习中的问题和解决过程
- 问题1:由于队列操作会修改集合的两端,因此将一端固定于索引0处要求移动元素,这句话不是很懂。
- 问题1解决方案:因为队列是两端进行改变,但是数组需要固定索引0,所以如果索引0处的值为1,当1被删除时,那么索引0处的值就变为2了,这个过程就是移动元素的意思。
- 问题2:为什么把数组变成环形可以除去在队列的数组实现中把元素移位的需要
- 问题2解决方案:在看书和依据自己的理解上来想,我认为,环形就是末端之后接的就是首端,所以了解这个图示,就会发现不需要元素移位了。
代码调试中的问题和解决过程
-
问题1:在进行PP5.1的编译时,又在toString那出了问题
-
问题1解决方案:后来进行了单步调试,每次一进行方法编程,就可能会出现这样的问题,后来发现还是=号的存在与不存在的问题
代码托管
上周考试错题总结
上周没有错题
结对及互评
点评模板:
-
博客中值得学习的或问题:
- 内容详略得当
- 有一定的细节思考
-
代码中值得学习的或问题:
- 想的比较全面,详细
点评过的同学博客和代码
- 本周结对学习情况
- 20172325
- 结对学习内容
- 两个人一起看书,弄懂书中的内容
- 进行PP的编程
其他(感悟、思考等,可选)
我觉得这一章后面有点看不懂,后来还是问同学才懂得,而且对于数组实现队列那部分,我觉得我还是很迷,所以还会继续看一看的。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 6/6 | |
第二周 | 985/985 | 1/1 | 18/24 | |
第三周 | 663/1648 | 1/1 | 16/40 |
参考资料
补充作业
技能 | 课前评估 | 课后评估 | ||
---|---|---|---|---|
程序理解 | 2 | 4 | ||
对编程整体的理解 | 4 | 6 | ||
架构设计、模块化设计、接口设计 | 2 | 5 | ||
模块实现、逐步细化 | 2 | 4 | ||
代码复审/代码规范/代码质量 | 3 | 6 |