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操做有时也称为fronthtml

  • 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的时候。必定是队列空了。
    java

因此在数组中全部单元都已填充后,若要添加元素进去,就须要扩大数组了,已有数组的元素必须按照其在队列中的正确顺序复制到新的数组中去,写一个expandCapacity方法来知足。git

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

    中秋乃佳节、明月递思念。很开心的放松了三天,但愿有更好的精力去投入本学期各学科以及工做。架构

    还有,想念父母和亲人必定要多打电话。温情时刻比什么都值得咱们珍惜,比什么都能让咱们认识本身的存在,比什么都能让咱们这些处在异乡的人倍感幸福。less

    补充做业:在你一辈子中身体最健康、最旺盛的时候,能在大学学习和研究,是一辈子中少有的机会。请说明一下,你以及具有的专业知识、技能、能力上还差距哪些?请看这个技能调查表,从表中抽取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

相关文章
相关标签/搜索