20172324 2018-2019-1 《程序设计与数据结构》第三周学习总结
教材学习内容总结
- 概述
- 队列是一种线性集合,也就是FIFO,举一个例子,银行排队。元素从队列末端进入,从队列前端退出。
操作 | 说明 |
---|---|
enqueue(add/insert) | 向队列末端添加一个元素 |
dequeue(remove/serve) | 从队列前段删除一个元素 |
first(front) | 考察队列前端的那个元素 |
isempty | 判定队列是否为空 |
size | 确定队列的元素数目 |
- Java API中的队列
API中提供的是一个接口Queue,由LinkedList来实现。
element:检索首部元素,但不删除它
增加元素:add&offer
add:保证队列含有给定元素,当给定元素没有添加到队列中会抛出异常
offer:把给定元素插入队列,成功返回true,失败返回false
- 删除元素:poll&remove
- poll:如果队列为空,返回null
- remove:如果队列为空,抛出一个异常
- 代码密钥,售票窗口模拟
队列ADT
- 泛型接口代码
public interface QueueADT<T> {
public void enqueue (T element);
public T dequeue();
public T first();
public boolean isEmpty();
public int size();
public String toString();
}
- 用链表实现队列
- 除了一个指向链表首元素的引用(称为head)之外,还需要跟踪另一个指向链表末元素的引用(称为tail)还需要一个整型变量count来跟踪队列中的元素数目
- 对于单向链表,可选择从末端入列,从前端出列。但双向链表可以解决遍历列表的问题,无所谓从哪端入列出列。
- 用数组实现
- 队列修改会修改集合两端,因此讲一端固定于索引0处要求移动元素,非环形数组实现的元素移位,将产生O(n)的复杂度。
环形数组:最后一个引索后面跟的是第一个引索
这个是实例化一个包含initialCapacity个泛型对象的数组的正确方法
queue = ((T[])(New Object[initialCapacity]))
双端队列
双端队列是队列的扩展,它允许从队列的两端添加、删除和查看元素。
教材学习中的问题和解决过程
- 问题1:书上说,“在栈中,其处理过程只在栈的某一段进行;而在队列中,其处理过程可以在两端进行”具体的意思及其他的区别是什么?
问题1解决方案:
某一段及两端的区别:
栈和队列是两种限定性的数据结构,它们限定了插入和删除数据元素的位置,在表的两端进行。
栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。
队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。- 队列先进先出,栈先进后出
- 遍历数据速度不同。栈只能从头部取数据 遍历整个栈最后才能取出来,同时开辟临时空间。队列基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,速度要快的多。
- 上面那个
问题2:请问这个问题是什么!
问题2解决方案:想不出来,我也好无奈哦.解决聊!
代码调试中的问题和解决过程
问题一:做pp5.2的时候题目要求自己编写toString方法,但是编完之后就提示有错误,错误在自己遍的toString方法上。
问题一解决方案:之前看书的时候没有注意这一句:“toString会变得更加复杂,因为元素不是从0处开始存储的,而且还可能会环绕数组的末端。”而我之前是直接复制5.1中的toString方法改的,所以出现了问题,发现问题重新改过之后就没有报错了
代码托管
上周考试错题总结
无
结对及互评
- 博客中值得学习的或问题:
书上代码的学习很到位
代码调试环节比较详细,从截图上来看注释也很规范整齐,值得学习。 - 基于评分标准,我给本博客打分:11分。得分情况如下:
正确使用Markdown语法(加1分)
模板中的要素齐全(加1分)
教材学习中的问题和解决过程, 加4分
代码调试中的问题和解决过程, 加4分
本周有效代码超过300分行,加2分
进度条中记录学习时间与改进情况的加1分
点评过的同学博客和代码
- 本周结对学习情况
- 结对同学学号21
- 结对学习内容
- 一起讨论了那个initialCapacity的问题,最后一致决定改为100
其他(感悟、思考等,可选)
课后调查:
skills | 课前评估(0...9) | 课后评估(0...9) |
---|---|---|
Programming Overall/对编程整体的理解 | 3 | 8 |
Programming:Comprehension/程序理解 | 4 | 9 |
Programming:Performance/效能改进和分析 | 5 | 8 |
Programming:Code Review/代码复查 | 3 | 9 |
Programming:Test/单元测试 | 5 | 9 |
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0 | 1/1 | 20/20 | |
第二周 | 300/500 | 1/2 | 18/38 | |
第三周 | 300/600 | 1/3 | 18/38 |