热门标签 | 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

推荐阅读
  • 实现系统调用
    实现系统调用一、实验环境​本次操作还是基于上次编译Linux0.11内核的实验环境进行操作。环境如下:二、实验目标​通过对上述实验原理的认识,相信 ... [详细]
  • 深入探讨:Actor模型如何解决并发与分布式计算难题
    在现代软件开发中,高并发和分布式系统的设计面临着诸多挑战。本文基于Akka最新文档,详细探讨了Actor模型如何有效地解决这些挑战,并提供了对并发和分布式计算的新视角。 ... [详细]
  • 在Effective Java第三版中,建议在方法返回类型中优先考虑使用Collection而非Stream,以提高代码的灵活性和兼容性。 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • 大华股份2013届校园招聘软件算法类试题D卷
    一、填空题(共17题,每题3分,总共51分)1.设有inta5,*b,**c,执行语句c&b,b&a后,**c的值为________答:5 ... [详细]
  • PHP函数的工作原理与性能分析
    在编程语言中,函数是最基本的组成单元。本文将探讨PHP函数的特点、调用机制以及性能表现,并通过实际测试给出优化建议。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • php三角形面积,335宝石大全
    php三角形面积,335宝石大全 ... [详细]
  • Java中的引用类型详解
    本文详细介绍了Java中的引用类型,包括强引用、软引用、弱引用和虚引用的特点和应用场景。 ... [详细]
  • 本文总结了近年来在实际项目中使用消息中间件的经验和常见问题,旨在为Java初学者和中级开发者提供实用的参考。文章详细介绍了消息中间件在分布式系统中的作用,以及如何通过消息中间件实现高可用性和可扩展性。 ... [详细]
  • 本文总结了软件工程课程M1和M2阶段的个人收获,包括项目开发中的技术学习、团队协作及管理经验。同时,对《构建之法》一书中的相关问题进行了理解和分析。 ... [详细]
  • Redis 是一个高性能的开源键值存储系统,支持多种数据结构。本文将详细介绍 Redis 中的六种底层数据结构及其在对象系统中的应用,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。通过12张图解,帮助读者全面理解 Redis 的数据结构和对象系统。 ... [详细]
  • 我自己做了一个网站图片的抓取,感觉速度有点慢抓取4000张图片可能得用15分钟左右的时间,我百度看用线程可以加快抓取,然后创建了5个线程抓取,但是5个线程是同步执行同样的操作一个图片就 ... [详细]
  • RocketMQ 运维监控实践指南
    本文详细介绍了如何实现 RocketMQ 的运维监控,包括监控平台的搭建、常用运维命令及其具体用法。适合对 RocketMQ 监控感兴趣的读者参考。 ... [详细]
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社区 版权所有