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
-20172304

点评模板:

  • 博客中值得学习的或问题:

    • 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数组实现循环队列的两种方法

转载于:https://www.cnblogs.com/LXY462283007/p/9704295.html

20172328 2018-2019《Java软件结构与数据结构》第三周学习总结相关推荐

  1. 2018-2019-20172329 《Java软件结构与数据结构》第九周学习总结

    2018-2019-20172329 <Java软件结构与数据结构>第九周学习总结 教材学习内容总结 <Java软件结构与数据结构>第十五章-图 一.图及无向图 1.图的相关概 ...

  2. 20172328 2018-2019《Java软件结构与数据结构》第八周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第八周学习总结 概述 Generalization 本周学习了二叉树的另一种有序扩展?是什么呢?你猜对了!ヾ(◍°∇°◍) ...

  3. 2018-2019-20172321 《Java软件结构与数据结构》第四周学习总结

    2018-2019-20172321 <Java软件结构与数据结构>第四周学习总结 教材学习内容总结 第六章 6.1列表集合 列表集合是一种概念性表示法,其思想是使事物以线性列表的方式进行 ...

  4. 数据结构java 图实验代码_20172329 2018-2019 《Java软件结构与数据结构》实验三报告...

    20172329 2018-2019-2 <Java软件结构与数据结构>实验三报告 课程:<Java软件结构与数据结构>html 班级: 1723java 姓名: 王文彬lin ...

  5. java数组的声明学号姓名线性结构_20172302 《Java软件结构与数据结构》实验一:线性结构实验报告...

    课程:<Java软件结构与数据结构> 班级: 1723 姓名: 侯泽洋 学号:20172302 实验教师:王志强老师 实验日期:2018年9月26日 必修/选修: 必修 实验内容 (1)链 ...

  6. 2018-2019-20172321 《Java软件结构与数据结构》第七周学习总结

    2018-2019-20172321 <Java软件结构与数据结构>第七周学习总结 教材学习内容总结 第11章 二叉查找树 一.概述 二叉查找树是一种含有附加属性的二叉树,该属性即其左孩子 ...

  7. 20172305 2018-2019-1 《Java软件结构与数据结构》第六周学习总结

    20172305 2018-2019-1 <Java软件结构与数据结构>第六周学习总结 教材学习内容总结 本周内容主要为书第十章内容: 树(一种非线性结构,其中的元素被组织成一个层次结构) ...

  8. 20172304 《程序设计与数据结构》第九周学习总结

    20172304 <程序设计与数据结构>第九周学习总结 教材学习内容总结 本章是第十五章,主要介绍了图的概念. 首先我来介绍一下图的基本结构. 从逻辑上讲,图是由边和结点组成的,在我的理解 ...

  9. 20172304 《程序设计与数据结构》 第二周学习总结

    20172304 <程序设计与数据结构>第二周学习总结 教材学习内容总结 本周主要学习了第三章和第四章的内容 第三章 集合概述--栈 3.1集合 集合是一种聚集组织了其他对象的对象. 集合 ...

  10. 学号 20172326 《程序设计与数据结构》第三周学习总结

    学号 20172326 <程序设计与数据结构>第三周学习总结 教材学习内容总结 队列是先进先出的数据结构(FIFO)与栈不同,队列的两端可分别进行操作 first与front相同,返回首段 ...

最新文章

  1. JQery遍历方法each
  2. pkg-config的使用
  3. 前端求职-htmlcss
  4. python wechatpay微信支付回调_【微信支付】JSAPI支付开发者文档
  5. 训练日志 2018.9.29
  6. 新加坡教育(20181101)
  7. 老徐FrankXuLei受邀为花旗银行讲授《微软WCF服务分布式开发与SOA架构设计课程》...
  8. System Center 2012 R2 CM系列之Configuration Manager系统需求
  9. AndroidStudio提高编译速度的建议
  10. Kafka从上手到实践 - 庖丁解牛:Topic Broker | 凌云时刻
  11. 【智能制造】推进智能制造,他山之石可以攻玉!
  12. 基于STM32的超声波HC-SR04和红外测距模块测量距离的实验对比(HAL库)
  13. 史上最牛最强的linux学习笔记 4.linux常用命令
  14. 创业管理:创业者的十八般武艺——1.2 创业者素质体系(1)
  15. commitizen和cz-customizable配置git commit message
  16. MNE学习笔记(六):Epoched data的可视化
  17. 华为防火墙USG6309E开局基础配置之网络设置
  18. 网络编程原理进阶___TCP/IP(javaee)
  19. “芒果数据库”————mongodb分片全集和管理
  20. 手把手教你实战开发黑白棋实时对战游戏

热门文章

  1. python最小二乘法线性回归_python 分别用梯度下降法和最小二乘法求线性回归 | 学步园...
  2. vs2015中提示未能找到类型或命名空间名Word
  3. 科层制的精髓是不可言说,敏捷的精髓是透明
  4. 【论文翻译】:(arxiv 2022)PS-NeRV: Patch-wise Stylized Neural Representations for Videos
  5. 在IIS上部署ASP网站
  6. Adaptive Graph Convolutional Neural Networks
  7. 什么是PPI,有什么作用?
  8. 安卓如何调出软键盘_Android软键盘显示模式及打开和关闭方式(推荐)
  9. markdown如何调整行距_Markdown基础语法
  10. 从ChargePoint到能链智电,充电服务商的价值创新