zoukankan      html  css  js  c++  java
  • 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,并且约定条件frontnull&&rearnull成立时,队列为空。
      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脚本的运行结果截图)

    上周考试错题总结

    本周未测试,没哟错题总结。

    结对及互评

    结对伙伴20172306

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

      • 对于队列的具体操作指令总结比较完善,很好的弥补了我在这方面的不理解;
      • 代码问题总结详细
      • 教材问题解决以后阐述的不是特别清楚
    • 代码中值得学习的或问题:

      • 内容详细
      • 在规范性上需要稍加注意。
    • 基于评分标准,我给本博客打分:8分。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 1/1 20/20
    第二周 941/8481 2/2 18/20
    第三周 653/9134 3/3 22/20

    参考资料

  • 相关阅读:
    SHELL基础
    阿里
    Ansible基础
    js实现的跳转页面方法实现汇总
    绕过js-sdk,微信转发的时候在标题添加时间和地点。
    wechat-js-sdk
    js调用百度地图api实现定位
    微创网站工作总结:用错地方的资源
    项目进行时—整理
    js实现双击改变文本内容
  • 原文地址:https://www.cnblogs.com/20172325DYK/p/9706791.html
Copyright © 2011-2022 走看看