20162305 2017-2018-1 《程序设计与数据结构》第6周学习总结
20162305 2017-2018-1 《程序设计与数据结构》第6周学习总结
教材学习内容总结
一、队列ADT
队列是一个线性集合,它在一端添加元素,在另一端删除元素,以先进先出的方式处理元素。
二、使用链表实现队列
实现链表的过程中,除了有一个指向链表第一个元素的引用(front)之外,还必须使用第二个引用(rear)指向表的最后一个元素,再利用一个整形变量count记录队列中的元素个数。
三、队列的实现:使用数组
将队列的一端固定在数组下标为0的地方。元素连续地保存在数组中。
教材学习中的问题和解决过程
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )
- 问题1:不理解教材中对循环数组的解释
- 问题1解决方案:用循环数组实现队列时,我们将队列中从队头到队尾的元素按顺时针方向存放在循环数组中一段连续的单元中。当需要将新元素入队时,可将队尾游标Q.rear按顺时针方向移一位,并在新的队尾游标指示的单元中存入新元素。出队操作也很简单,只要将队头游标Q.front依顺时针方向移一位即可。容易看出,用循环数组来实现队列可以在O(1)时间内完成Enqueue和Dequeue运算。执行一系列的入队与出队运算,将使整个队列在循环数组中按顺时针方向移动。
我们直接用队头游标Q.front指向队头元素所在的单元,用队尾游标Q.rear指向队尾元素所在的单元。另外,我们也可以用队头游标Q.front指向队头元素所在单元的前一个单元,或者用队尾游标Q.rear指向队尾元素所在单元的下一个单元的方法来表示队列在循环数组中的位置
代码调试中的问题和解决过程
- 问题1:不清楚LinkedQueue中enqueue方法。
LinearNode<T> node = new LinearNode<T>(element);
if(count == 0)
front = node;
else
rear.setNext(node);
rear = node;
count++;
- 问题1解决方案:这段代码中,先实例化一个node对象。判断如果这个链表为空,则将node直接赋值给front。若不为空,则将rear指向node,并将node赋值给rear,因为链表加入元素加在队尾,所以需要将指针和队尾元素都进行调整。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
本周测试结果仍未公布,公布后会补上这一内容
点评模板:
-
博客中值得学习的或问题:
- 20162306
-
代码中值得学习的或问题:
- xxx
- xxx
- ...
其他(感悟、思考等,可选)
这周的学习还是比较困难,我感觉我对这周学习的队列内容掌握的不是很好,还需要继续努力,利用好时间补上这一块内容。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 20/20 | |
第二周 | 100/100 | 1/2 | 15/35 | |
第三周 | 454/554 | 1/3 | 15/50 | |
第四五周 | 772/1326 | 2/5 | 20/70 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)