热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

学习总结_20172308《Java软件结构与数据结构》第三周学习总结

本文由编程笔记#小编为大家整理,主要介绍了20172308《Java软件结构与数据结构》第三周学习总结相关的知识,希望对你有一定的参考价值。
本文由编程笔记#小编为大家整理,主要介绍了20172308《Java软件结构与数据结构》第三周学习总结相关的知识,希望对你有一定的参考价值。



教材学习内容总结


第 5 章 队列



  1. 队列:



  • 一种线性集合,其元素从一端加入,从另一端删除

  • 元素处理:FIFO



  1. 与栈的比较



  • 异:(1) 栈的处理过程只在栈的某一端进行;队列的处理过程在队列的两端进行。(2) 实现不一致

  • 同:与栈类似,队列中也没有操作能让用户抵达队列中部,同样也没有操作允许用户重组或删除多个元素(链表可以满足这类处理)



  1. 队列中的方法



  • 栈与队列的实现不一致:Java API提供的stack类实现了栈集合,却没有提供队列类,只提供了Queue接口,由多个类来实现

  • Queue接口提供:

    element方法:检索队列首部元素但不删除它

    add和offer方法:往队列中添加元素

    poll和remove方法:从队列中删除元素



  1. 栈的首要作用是颠倒顺序,队列的首要作用是保持顺序


  2. 链表实现队列



  • 实现关键:队列差别栈在于必须操作链表两端。所以需要指向链表首元素的引用和指向链表末元素的引用,还有跟踪队列元素数目的变量count

  • enqueue操作要求将新元素放到链表末端;

  • dequeue操作实现要确保至少存在一个可返回的元素



  1. 数组实现队列



  • 实现策略:将队列的某一端固定在数组的索引0处

  • 非环形数组实现的元素位移将产生O(n)的复杂度

    注:对于队列,用固定数组来实现栈的效率不高。

  • 把数组看成是环形的,可以除去在队列的数组实现中把元素位移的需要

  • 环形数组:并不是一种新的结构,只是数组的最后一个索引后面跟的是第一个索引,用来存储队列。



  1. 双端队列:队列的扩展,允许从队列的两端添加、删除和查看元素。


教材学习中的问题和解决过程


问题1:如何分析理解数组实现的队列中所需注意的问题?

问题1解析:

技术分享图片

首先,数组实现的操作选择使得效率很低:因为用数组实现队列的策略是假定队列的首元素总是存储在数组的索引0处,而队列操作会修改集合的两端,则会要求移动元素,那么操作的复杂度为O(n);因此,用固定数组来实现队列效率不高

所以,为了除去元素移位的需要,可以引入环形数组

技术分享图片

环形队列:内存上没有环形的结构,实际上是数组的线性空间来实现。

那么就存在一个问题:当数据达到了数组的尾部怎么办?如何判断达到了尾部?



  • 数据达到尾部了可以进行数组扩容操作以达到要求。

  • 判断队列为空,还是为满是环形队列的关键:当tail追上head时,队列为满时,当head追上tail时,队列为空。

【参考资料】环形队列实现原理


问题2:

问题2解析:

【参考资料】


代码运行中的问题及解决过程


问题1:


上周考试错题总结



  • 错题1:


  • 错题1解析:


  • 错题2:


  • 错题2解析:


  • 错题3:


  • 错题3解析:


  • 错题4:


  • 错题4解析:



代码托管


结对及互评



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

    • 侯泽洋同学的博客排版工整,界面很美观

    • 问题总结做得很全面

    • 对于书上的疑惑总会想办法解决它,这种探索的精神值得我去学习


  • 代码中值得学习的或问题:

    • 对于编程的编写总能找到角度去解决


  • 本周结对学习情况

    • 20172302

    • 结对学习内容

      • 第三章内容:集合概述——栈

      • 第四章内容:链式结构——栈




学习进度条



































代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周0/01/14/4
第二周560/5601/26/10

推荐阅读
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • LeetCode笔记:剑指Offer 41. 数据流中的中位数(Java、堆、优先队列、知识点)
    本文介绍了LeetCode剑指Offer 41题的解题思路和代码实现,主要涉及了Java中的优先队列和堆排序的知识点。优先队列是Queue接口的实现,可以对其中的元素进行排序,采用小顶堆的方式进行排序。本文还介绍了Java中queue的offer、poll、add、remove、element、peek等方法的区别和用法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
author-avatar
永不言败LM
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有