20172328 2018-2019《Java软件结构与数据结构》第三周学习总结
20172328 2018-2019《Java软件结构与数据结构》第三周学习总结
概述 Generalization
本周学习了第五章:队列。主要内容包含队列的处理过程、如何用对例如求解问题、各种队列的实现等。
教材学习内容总结 A summary of textbook
- 5.1概述
- 队列是一种线性集合,其元素从一端加入,从另一端删除;队列的顺序是先进先出(First in First out)
- 与栈的比较:在栈中,其处理过程只在栈的某一端进行,而在队列中,其处理过程可在队列的两端进行。
- 队列的操作:
| 操作 | 说明 |
|---|---|
| enqueue | 向列表末端添加一个元素 |
| dequeue | 从队列前端删除一个元素 |
| first | 考察队列前端的那个元素 |
| isEmpty | 判定队列是否为空 |
| size | 判定队列中的元素数目 |
| toString | 返回队列的字符串表示 |
这些命名约定并不通用于所有的集合操作。有时enqueue也被换成add或insert;dequeue也被换成remove或serve;first操作有时也称为front
- 5.2javaAPI中的队列
- Java集合API并没有提供队列类,而是提供了一个Queue接口,由多个类(包括LinkedList类)来实现的。
- Queue接口没有实现传统的enqueue、dequeue、first操作,而定义了另外两种方法,往队列里添加元素或者从队列里删除元素,这些方法在异常处理时有很大差别,一个是提供了布尔返回值,一个是抛出一个异常。
- Queue接口定义了一个element方法,该方法检索队列首部的元素,但不删除它。
- Queue接口提供了两个方法add和offer,往队列中添加元素。add操作可以确保队列中含有给定的元素,如果给定元素没有添加到队列中,该操作将抛出异常;offer操作把给定元素插入到队列中,如果插入成功,返回true,否则返回false
- Queue接口提供了两个方法poll和remove,从队列中删除元素。当试图从一个空队列中删除一个元素时,发生异常;如果队列为空,poll方法返回null,remove方法抛出一个异常。
- 5.3使用队列:代码密钥
- 了解凯撒加密法和重复密钥。知晓队列是一种可存储重复编码密钥的便利集合。
- 5.4使用队列:售票口模拟
- 具体代码理解和体现。
- 5.5队列ADT
- 定义的泛型QueueADT接口,表示队列的操作,把操作的一般目标和实现方式分开。
- 5.6用链表实现队列
- 要用链表实现栈,就要操作链表的两端。所以除了一个指向链表首元素的引用(称为head)之外,还需要跟踪另一个指向链表末元素的引用(称为tail),还需要一个整型变量count来跟踪队列中的元素数目。
- 要区分往链表的哪端添加或删除元素吗?为了使dequeue复杂度为O(1),我们选择从末端入列,从前端出列。具体内容参照代码学习。
- 5.7用数组实现队列
- 由于队列操作会修改集合的两端,因此将一端固定在索引为0处要求移动元素。
- 因为要求移动元素,所以要实现dequeue操作的复杂度为O(n),数组实现的操作使得效率低。
- 设计要点:用于实现集合的数据结构与集合本身的匹配是非常重要的,固定数组实现策略对栈是高效的,是因为所有的活动(添加和删除元素)都是在集合的一端进行的。而对于队列,我们是在其两端进行操作的,而顺序也不是无关紧要的了,因此,用数组来实现队列的效率不高。
- 用环形数组来实现队列,它定义在名为CircleArrayQueue的类中。环形数组并不是一种新结构,它只是一种把数组用来存储队列的方法。从概念上说,如果数组的最后一个索引后面跟的是第一个索引,那么该数组就可用作环形数组。
- 5.8双端队列
- 双端队列是队列的扩展,它允许从队列的两端添加、删除和查看元素。
教材学习中的问题和解决过程 Problem and countermeasure
1.看教材的时候好多地方不能理解,与上文意不符,后来和同学们讨论,才发现书上的好多错误。
问题1具体解决:改过来,还能怎么样!毕竟是一本优秀的教材,可能翻译的不太对,包容~~~
- 74页代码的Integer应在<>里
- 74页for循环中的圆括号)多了
- 74页变量好像也不太对
- 83页代码中front是什么???此处应该是head
- 85页设计要点中最后一句话:用固定数组来实现栈的效率不高。怎么会是栈!!!应该是队列。

2.环形数组如果满了,如何往里面添加元素,是要覆盖之前的元素吗?是因为满了而添加不进去?还是添加后原来的元素丢失?我理解的不深入。
问题2具体解决:数组中仅仅存储数组大小-1个元素,保证rear转一圈之后不会和head相等。也就是队列满的时候。rear+1=head,中间刚好空一个元素。当rear=head的时候。一定是队列空了。

所以在数组中所有单元都已填充后,若要添加元素进去,就需要扩大数组了,已有数组的元素必须按照其在队列中的正确顺序复制到新的数组中去,写一个expandCapacity方法来满足。
public void expandCapacity()
{
T[] larger = (T[]) (new Object[queue.length*2]);
for(int scan = 0;scan <count; scan++)
{
larger[scan] = queue[front];
front = (front + 1) % queue.length;
}
front = 0;
rear = count;
queue = larger;
}
上周测试活动错题改正 Correction
本周没有测试,故没有此项。
码云链接
代码量(截图)

结对及互评Group Estimate
点评模板:
- 博客中值得学习的或问题:
- 20172301:如果你也正在学习Java,那么我相信他的博客一定对你有所助益,因为他的博客是有温度的博客,为什么这么讲?当遇到一点点思维纠纷的时候,人脑总是规避并幻想复杂的后续工作,而总在寻找捷径。而当在繁杂的生活琐事中,静下心保持自己的节奏去思考一些真正有用的问题,产生一些新奇、严谨的思想其实是很值得敬佩的。其实自己懂和解释给别人让别人懂是两回事。郭恺同学的博客确实给人讲清楚了他所思考的问题,并且问题的剖析角度和过程都很严密,故言其为有温度的博客风格。
- 20172304:少即是多(less is more)应该是我另一位搭档伙伴的博客风格了吧。上学期的博客作业我猜测其实他是不偏重的,主要将学习精力花在了代码上,这学期明显有很多改变;我觉得博客质量明显在变好,而且很多内容在抓重点,一定是经过了考虑的,所以我相信段志轩同学这学期一定能把这门课学好。
- 本周结对内容:本周讨论了第五章的书本错误,以及对于代码Codes的理解让我们都更加深入理解了队列能够保持元素的顺序这个道理。然后我们还讨论了环形数组问题,都惊叹于
rear = (rear+1) % queue.length的神奇。能够巧妙的更新rear的值。
其他(感悟、思考等,可选)Else
中秋乃佳节、明月递思念。很开心的放松了三天,希望有更好的精力去投入本学期各学科以及工作。
还有,想念父母和亲人一定要多打电话。温情时刻比什么都值得我们珍惜,比什么都能让我们认识自己的存在,比什么都能让我们这些处在异乡的人倍感幸福。
补充作业:在你一生中身体最健康、最旺盛的时候,能在大学学习和研究,是一生中少有的机会。请说明一下,你以及具备的专业知识、技能、能力上还差距哪些?请看这个技能调查表,从表中抽取5-7项你认为对你特别重要的技能,记下你目前的水平,和你想在课程结束后达到的水平(必须列出5项)。链接
我的回答 (MY ANSWER) :
- 我认为对我最重要的技能是:
- 1.programming:Design(架构设计、模块化设计、接口设计) now: 4 ---- expectation:8 & 9
- 2.programming:implementation(模块实现、逐步细化) now:4---- expectation:8
- 3.program:performance(效能分析与改进)now:5 ---- expectation:8
- 4.supporting knowledge(帮助软件开发工作的其他技能)now:2 ---- expectation:6
- 5.Basic Design patterns & principles
(基本设计模式)now:3---- expectation:7
学习进度条Learning List
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
|---|---|---|---|
| 目标 | 5000行 | 30篇 | 400小时 |
| 第一周 | 0/0 | 1/1 | 8/8 |
| 第二周 | 621/621 | 1/2 | 12/20 |
| 第三周 | 678/1299 | 1/3 | 10/30 |
参考资料Reference
- [Java软件结构与数据结构](第四版)
- Java之环形队列的实现
- Java数组实现循环队列的两种方法
20172328 2018-2019《Java软件结构与数据结构》第三周学习总结的更多相关文章
- 20172328 2018-2019《Java软件结构与数据结构》第一周学习总结
20172328 2018-2019<Java软件结构与数据结构>第一周学习总结 概述 Generalization 本周学习了软件质量.数据结构以及算法分析的具体内容,主要依托于所用教材 ...
- 20172328 2018-2019《Java软件结构与数据结构》第九周学习总结
20172328 2018-2019<Java软件结构与数据结构>第九周学习总结 概述 Generalization 本周学习了无向图.有向图.带权图.常用的图算法.图的实现策略. 教材学 ...
- 20172328 2018—2019《Java软件结构与数据结构》第二周学习总结
20172328 2018-2019<Java软件结构与数据结构>第二周学习总结 概述 Generalization 本周学习了第三章集合概述--栈和第四章链式结构--栈.主要讨论了集合以 ...
- 20172328 2018-2019《Java软件结构与数据结构》第四周学习总结
20172328 2018-2019<Java软件结构与数据结构>第四周学习总结 概述 Generalization 本周学习了第六章·列表,主要让我们认识列表以及分析各种列表实现. 教材 ...
- 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十五章-图 一.图及无向图 1.图的相关概 ...
- 2018-2019-20172321 《Java软件结构与数据结构》第九周学习总结
2018-2019-20172321 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 第15章 图 无向图 图由顶点和边组成. 顶点由名字或标号来表示,如:A.B.C.D: ...
- 《JAVA软件结构与数据结构》第一周学习总结
学号 20172326 <JAVA软件结构与数据结构>第一周学习总结 教材学习内容总结 软件质量的几大特性 增长函数与大O记法 大O记法用来表示表示增长函数,从而来表示算法的复杂度 算法的 ...
- 2018-2019-20172329 《Java软件结构与数据结构》第二周学习总结
2018-2019-20172329 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 <Java软件结构与数据结构>第三章 集合概述--栈 一.集合 1.我们印 ...
- 20172305 2018-2019-1 《Java软件结构与数据结构》第二周学习总结
20172305 2018-2019-1 <Java软件结构与数据结构>第二周学习总结 教材学习内容总结 本周内容主要为书第三章和第四章的内容: 第三章(以数组来替代栈的作用) 集合(聚集 ...
- 20172305 2018-2019-1 《Java软件结构与数据结构》第九周学习总结
20172305 2018-2019-1 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 本周内容主要为书第十五章内容: 图(结点和结点之间的连接构成) 顶点:结点 边:结 ...
随机推荐
- 打印并输出 log/日志到文件(C++)
#include <stdarg.h> #define MAX_LEN 1024 bool debug_mode; // 使用方法同 printf void lprintf(const c ...
- Python3 与 C# 并发编程之~ 进程篇
上次说了很多Linux下进程相关知识,这边不再复述,下面来说说Python的并发编程,如有错误欢迎提出- 如果遇到听不懂的可以看上一次的文章:https://www.cnblogs.com/dot ...
- 深入理解JVM(2)——运行时数据区
1.运行时数据区 1.1.程序计数器 记录当前线程正在执行的字节码指令的地址,如果正在执行的是 Native 方法,这个计数器值则为空. 1.2.虚拟机栈 每个 Java 方法在执行的同时会创建一个栈 ...
- bzoj3051[WC2013]平面图(树上倍增+平面图转对偶图+扫描线)
简要题意:二维平面上n个点,点之间有一些连线,连线不在点之外的地方相交,将平面分为若干个区域.给出一些询问点对,问从这个点所在的区域走到另一个点所在的区域的最小代价. 题解:这道题首先可以把平面图转对 ...
- 第五篇-ubuntu下插入U盘,显示可读系统。
如果插上U盘,发现里面的文件都上了锁,显示可读.并且在其它电脑上存在同样的情况. 可是尝试按shift键插入U盘.
- 对于mysql数据库优化的见解
一.数据库占用的空间大小.表占用空间大小.索引占用空间大小 在用阿里云的数据库的时候经常出现磁盘空间爆满的情况.所以要经常查询数据库相关内容占用的磁盘大小,有很多mysql客户端如navicat 就可 ...
- Consequence of Point-by-Point Bounds
设 $X$ 是完备距离空间, $\scrF$ 是 $X$ 上的实连续函数族且具有性质: 对于每一 $x\in X$, 存在常数 $M_x>0$, 使得对于每一 $F\in\scrF$, $$\b ...
- 基于Windows,Python,Theano的深度学习框架Keras的配置
1.安装Anaconda 面向科学计算的Python IDE--Anaconda 2.打开Anaconda Prompt 3.安装gcc环境 (1)conda update conda (2)cond ...
- python中字符串编码转换
字符串编码转换程序员最苦逼的地方,什么乱码之类的几乎都是由汉字引起的. 其实编码问题很好搞定,只要记住一点: 任何平台的任何编码,都能和Unicode互相转换. UTF-8与GBK互相转换,那就先把U ...
- SQL Server - CLUSTERED
CREATE TABLE dbo.t_MetricBook ( MetricSetID smallint NOT NULL, BookID smallint NOT NULL, ReportingCc ...