20172318 2018-2019-1 《程序设计与数据结构》第3周学习总结
20172318 2018-2019-1 《程序设计与数据结构》第3周学习总结
教材学习内容总结
队列
-
概述
- 队列是一种线性集合,其元素从一端加入,从另一端删除
- 队列的元素是按FIFO方式处理的。第一个进入的元素,也就是第一个退出的元素
-
用链表实现队列
-
除了一个指向链表首元素的引用(称为head)之外,还需要跟踪另一个指向链表末元素的引用(称为tail),还要用一个整型变量count来跟踪队列中的元素数目。
-
如果是往链表前端添加新结点,那么就把该新结点的next指针设置为指向链表的head变量,把head变量设置为指向新结点。如果是往链表的末端添加新结点,那么就把链表末端结点的next指针设置为指向新结点,然后把链表的tail设置为指向新结点。
-
链表实现队列的其他操作相当简单,它们类似于栈的相应操作。只要返回一个指向队列前端元素的引用即可实现first操作。当元素数目为0时isEmpty操作返回true,否则返回falseosize操作只要返回队列中的元素数目即可。
-
-
用数组实现队列
-
基于数组的队列实现策略就是将队列的某一端(比如前端)固定在数组的索引0处。所有元素会不间断地存放在数组中。
-
与ArrayStack实现中的top变量类似,整型变量rear用于表明数组中的下一个空闲单元。注意,rear还表示了队列中的元素数目。
-
由于队列操作会修改集合的两端,因此将一端固定于索引0处要求移动元素。
-
把数组看作是环形的,可以除去在队列的数组实现中把元素移位的需要·
-
教材学习中的问题和解决过程
这周内容和上周差不多 在队列的理解和实现没遇到什么困难,具体的问题也只有双向队列的实现问题,解决方案已在下文给出
代码调试中的问题和解决过程
- 问题1:双向队列中在首尾添加和删除时指针具体怎么操作
- 问题1解决方案:参考了一篇博客一个用Java实现的双向队列,可以分别在头尾插入和删除节点,使用两个指针,代码如下
public void addFirst(Item item) {
if (item == null)
throw new NullPointerException("can't add null element!");
Node first = new Node();
first.item = item;
first.prev = nil;
first.next = nil.next;
nil.next.prev = first;
nil.next = first;
n++;
}
public void addLast(Item item) {
if (item == null)
throw new NullPointerException("can't add null element!");
Node last = new Node();
last.item = item;
last.next = nil;
last.prev = nil.prev;
nil.prev.next = last;
nil.prev = last;
n++;
}
public Item removeFirst() {
if (isEmpty())
throw new NoSuchElementException("Can't remove from empty deque");
Node del = nil.next;
Item item = del.item;
del.next.prev = nil;
nil.next = del.next;
n--;
return item;
}
public Item removeLast() {
if (isEmpty()) throw new NoSuchElementException("Stack underflow");
Node del = nil.prev;
Item item = del.item;
del.prev.next = nil;
nil.prev = del.prev;
n--;
return item;
}
上周考试错题总结
上周没有进行测试,所以没有错题总结
代码托管
点评过的同学博客和代码
- 本周结对学习情况
- 20172312
- 结对学习内容
- 课本第五章
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 8/8 | |
第二周 | 500/500 | 1/2 | 15/ 23 | |
第五周 | 802/1302 | 1/3 | 12/35 |