教材学习内容总结
第五章
- 5.1概述
- 队列是一种线性集合,其元素从一端加入,从另一端删除;队列的处理方式是先进先出(First in First out)。
- 与栈的比较(LIFO)
- 栈是一端操作,先进后出
- 队列是两端操作,先进先出
-
栈的一些操作
操作 描述 enqueue 向队列末端添加一个元素 dequeue 从队列前端删除一个元素 first 考察队列前端的那个元素 isEmpty 判定队列是否为空 size 判定队列中的元素数目 toString 返回队列中的字符串表示 -
5.2javaAPI中的队列:Java集合API并没有提供队列类,而是提供了一个Queue接口,由多个类(包括LinkedList类)来实现的。
-
5.5队列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();
}
}
-
5.6用链表实现队列:要用链表实现栈,就要操作链表的两端。
- 需创建两个引用:一个指向链表首元素(head),一个指向链表末元素(tail)
- 另需一个整型变量count来跟踪队列中的元素数目
-
5.7用数组实现队列
- 队列操作会修改集合的两端,因此将队列的某一端固定在数组的索引0处,所有元素不间断地存放在数组中。
- dequeue操作的复杂度为O(n),所以用固定数组实现栈的效率较低
-
5.8双端队列
- 队列的扩展,允许从队列的两端添加、删除和查看元素。
教材学习中的问题和解决过程
- 问题1:打教材上的代码的时候有些地方总是红色,反复检查发现和教材一致没有打错,后来知道教材其实有一些问题。
- 解答:比如说这里,教材上是
public CircularArrayQueue() {
this (DEFAULT_CAPACITY);
}
这个()里就会报错,我直接把里面改成100就好了
代码调试中的问题和解决过程
- 在作LinkedQueue类的
first()
方法的时候,我是把链表实现栈的peek()
方法复制过来修改的,但是测试总是有问题,而且在CircularArrayQueue类也是这么做出来的却没有问题。
- 最后我还是不知道为什么,我直接把
// if (isEmpty())
// throw new EmptyCollectionException("queue");
注释掉了就可以了,等我再想想正常的方法再来修改。
我发现了是我tostring的方法有问题,原来这样写,使用这个方法后栈就被清空了,所以弹出会错误,改为之后就可以了
代码托管
上周考试错题总结
结对及互评
- 20172324曾程
- 博客中值得学习的或问题:
- 书上代码的学习很到位
- 代码调试环节比较详细,从截图上来看注释也很规范整齐,值得学习。
- 基于评分标准,我给本博客打分:11分。得分情况如下:
- 正确使用Markdown语法(加1分)
- 模板中的要素齐全(加1分)
- 教材学习中的问题和解决过程, 加4分
- 代码调试中的问题和解决过程, 加4分
- 本周有效代码超过300分行,加2分
- 进度条中记录学习时间与改进情况的加1分
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 |
第一周 | 0/0 | 1/1 | 8/8 |
第二周 | 671/671 | 1/2 | 17/25 |
第二周 | 345/1016 | 1/3 | 15/40 |
参考资料
- [Java软件结构与数据结构](第四版)
- java集合包总结
- 《Java学习笔记(第8版)》学习指导