20172325 2018-2019-2 《Java程序设计》第三周学习总结
20172325 2018-2019-2 《Java程序设计》第三周学习总结
教材学习内容总结
一、什么是队列?
- 队列是一种线性集合,其元素从一端加入,从另一端删除;
- 队列的元素按照FIFO的方式处理,也就是遵从“先进先出”的原则,第一个进入队列的元素将是第一个退出的元素;
- 队列分为队列有队头(front)和队尾(rear),数据从队尾进入队列,从队头出队列,队头指向队列的第一个数据,队尾指向队列中的最后一个数据。
二、队列的顺序存储结构
- (1) 顺序队列的定义:
队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表。 - (2)顺序队列的表示:
和顺序表一样,顺序队列利用内存中一段连续的存储空间来存放当前队列中的元素。
由于队列的队头和队尾的位置是变化的,设置两个指针front和rear分别指示队头元素和队尾元素,它们的初值在队列初始化时均应置为0。 - (3)顺序队列的基本操作
入队时:将新元素插入rear所指的位置的后一位。
出队时:删去front所指的元素,然后将front加1并返回被删元素。
三、链表实现队列
- 对于链式队列,将使用带头指针front和尾指针rear的单链表实现,front直接指向队头的第一个元素,rear指向队尾的最后一个元素,其结构如下:
- 之所以选择单链表(带头尾指针)而不采用循环双链表或者双链表主要是双链表的空间开销(空间复杂度,多前继指针)相对单链表来说大了不少,而单链表只要新增头指针和尾指针就可以轻松实现常数时间内(时间复杂度为O(1))访问头尾结点。下面我们来看看如何设计链式队列:
1、以上述的图为例分别设置front和rear指向队头结点和队尾结点,使用单链表的头尾访问时间复杂度为O(1)。
2、设置初始化空队列,使用front=rear=null,并且约定条件front==null&&rear==null成立时,队列为空。
3、出队操作时,若队列不为空获取队头结点元素,并删除队头结点元素,更新front指针的指向为front=front.next
4、入队操作时,使插入元素的结点在rear之后并更新rear指针指向新插入元素。
5、当第一个元素入队或者最后一个元素出队时,同时更新front指针和rear指针的指向。
这一系列过程如下图所示:
四、数组实现队列
- 由于队列操作会修改集合的两端,因此将一端固定于索引0处要求移动元素。
- 非环形数组实现的元素移位,将产生O(n)的复杂度。
- 把数组看作是环形的,可以除去在队列的数组实现中把元素移位的需要。
教材学习中的问题和解决过程
- 问题1:什么是溢出?溢出有哪些情况?
问题1解决方案:
顺序表的溢出现象:
(1)“下溢”现象
当队列为空时,做出队运算产生的溢出现象。“下溢”是正常现象,常用作程序控制转移的条件。
(2)"真上溢"现象
当队列满时,做进栈运算产生空间溢出的现象。“真上溢”是一种出错状态,应设法避免。
(3)"假上溢"现象
由于入队和出队操作中,头尾指针只增加不减小,致使被删元素的空间永远无法重新利用。当队列中实际的元素个数远远小于内存中本分配的空间时,也可能由于尾指针已超越向量空间的上界而不能做入队操作。该现象称为"假上溢"现象。如下图
- 问题2:队列的基本操作方式有哪几种,为何在网络上查找具体指令时出现很多不同的叫法,到底哪一些是规范的操作?
问题2解决方案:首先查找了课本,看了同学的博客,总结出了五种具体的操作指令:
enqueue:向队列末端添加一个元素
dequeue:从队列前段删除一个元素
first:考察队列前端的那个元素
isempty:判定队列是否为空
size:确定队列的元素数目
关于网络上的不同指令,询问了课代表余坤澎同学,他给我的解释是,这些不同的指令虽然有不同的叫法,但是都是为了达到同一目的,但是比较规范的也就是常用的、约定俗成的一些叫法,不用太在意叫法上的不同。
代码调试中的问题和解决过程
问题1:在实现PP5.7的时候跑出了这个异常,目测应该是空指针异常。
问题1解决方案:断点测试之后,发现异常出在下面这个地方,
由于count值没有自增,导致了指针指向空的情况。加上count++之后运行正常。
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
本周未测试,没哟错题总结。
结对及互评
- 博客中值得学习的或问题:
- 对于队列的具体操作指令总结比较完善,很好的弥补了我在这方面的不理解;
- 代码问题总结详细
- 教材问题解决以后阐述的不是特别清楚
- 代码中值得学习的或问题:
- 内容详细
- 在规范性上需要稍加注意。
- 基于评分标准,我给本博客打分:8分。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 20/20 | |
第二周 | 941/8481 | 2/2 | 18/20 | |
第三周 | 653/9134 | 3/3 | 22/20 |
参考资料
20172325 2018-2019-2 《Java程序设计》第三周学习总结的更多相关文章
- Java程序设计第三周学习总结
1. 本周学习总结 2. 书面作业 Q1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; ...
- 20172325 2018-2019-2 《Java程序设计》第九周学习总结
20172325 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 图的定义 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和 ...
- 20172325 2018-2019-1 《Java程序设计》第二周学习总结
20172325 2018-2019-1 <Java程序设计>第二周学习总结 教材学习内容总结 3.1集合 集合是一种聚集.组织了其他对象的对象.集合可以分为两大类:线性集合和非线性集合. ...
- 20172325 2017-2018-2 《Java程序设计》第九周学习总结
20172325 2017-2018-2 <Java程序设计>第九周学习总结 教材学习内容总结 异常 1.学习了异常的基本概念: 2.区分异常与错误: 一个异常是指一个定义非正常情况或错误 ...
- 对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈
对于“2017面向对象程序设计(Java)第三周学习总结”存在问题的反馈 一:教学中存在的学习问题 “1.由于同学们平时练习不足,上课总是出现跟不上老师的节奏的现象. 2.个别同学上课不认真听讲,打开 ...
- 20172325《Java程序设计》第一周学习总结
20172325<Java程序设计>第一周学习总结 教材学习内容总结 第一章 1.1软件质量 软件工程是一门关于高质量软件开发的技术和理论的学科. 高质量软件的特征 1.2 数据结构 软件 ...
- 学号 20175212 《Java程序设计》第九周学习总结
学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...
- 20145213《Java程序设计》第九周学习总结
20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...
- 20145213《Java程序设计》第二周学习总结
20145213<Java程序设计>第二周学习总结 教材学习内容总结 本周娄老师给的任务是学习教材的第三章--基础语法.其实我觉得还蛮轻松的,因为在翻开厚重的书本,一股熟悉的气息扑面而来, ...
- 21045308刘昊阳 《Java程序设计》第九周学习总结
21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...
随机推荐
- 使用阿里云docker加速器
登陆之后,在docker镜像仓库-加速器可获得专有加速地址. 如何使用Docker加速器 针对Docker客户端版本大于1.10的用户 您可以通过修改daemon配置文件/etc/docker/dae ...
- Javascript 的数据是什么数据类型?
Javascript 中的数据都是以 64 位浮点 float 存储的. 所有语言对浮点的精度是很难确定的. 如下代码可以实验到问题. <script> var a = 0.4; var ...
- oracle之 关闭透明大页
方法一: 1.设置/etc/grub.conf文件,添加 transparent_hugepage=never ,在系统启动是禁用 [root@hbdw1 ~]# cat /etc/grub.conf ...
- ffmpeg 从内存中读取数据(或将数据输出到内存)(转)
更新记录(2014.7.24): 1.为了使本文更通俗易懂,更新了部分内容,将例子改为从内存中打开. 2.增加了将数据输出到内存的方法. 从内存中读取数据 ffmpeg一般情况下支持打开一个本地文件, ...
- hackerrank Week of Code 31
https://www.hackerrank.com/contests/w31/challenges Beautiful Word 模拟 Accurate Sorting 检查每个数字距离原位是否都不 ...
- Traits
'folly/Traits.h' Implements traits complementary to those provided in <type_traits> Implements ...
- 如何在Solr中实现多core查询
基于solr或者elasticsearch提供的多核,多索引,多shard等查询能力,一般都是由lucene提供的多索引查询的功能演化而来的,这个功能在单机版的lucene里面确实没有发挥多大的威力, ...
- Django框架之模板语法【转载】
Django框架之模板语法 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django ...
- 关于RDS for mysql中导入数据库set global event_scheduler =1 需要更多超级权限
关于RDS中导入数据库set global event_scheduler =1 需要更多超级权限 报错提示 其实这个意思是 让mysql自动启动 计划任务 如果在 命令行下 查询 SHOW VAR ...
- 普通方法调用,Invoke,begininvoke三者的区别总结及异步与同步的区别总结
(1)普通方法调用(直接调用)与Invoke()方法调用方法 使用的线程Id是一样的 即属于同步. (2)BeginInvoke(<输入和输出变量>,AsyncCallback callb ...