20172324 2018-2019-1 《程序设计与数据结构》第三周学习总结

20172324 2018-2019-1 《程序设计与数据结构》第三周学习总结

教材学习内容总结

  • 概述
  1. 队列是一种线性集合,也就是FIFO,举一个例子,银行排队。元素从队列末端进入,从队列前端退出。
操作 说明
enqueue(add/insert) 向队列末端添加一个元素
dequeue(remove/serve) 从队列前段删除一个元素
first(front) 考察队列前端的那个元素
isempty 判定队列是否为空
size 确定队列的元素数目
  • Java API中的队列

API中提供的是一个接口Queue,由LinkedList来实现。

element:检索首部元素,但不删除它

  • 增加元素:add&offer

    • add:保证队列含有给定元素,当给定元素没有添加到队列中会抛出异常
    • offer:把给定元素插入队列,成功返回true,失败返回false
  • 删除元素:poll&remove
    • poll:如果队列为空,返回null
    • remove:如果队列为空,抛出一个异常
  • 代码密钥,售票窗口模拟
  • 队列ADT
    • 泛型接口代码
public interface QueueADT<T> {

    public void enqueue (T element);
    public T dequeue();
    public T first();
    public boolean isEmpty();
    public int size();
    public String toString();

}
  • 用链表实现队列
  1. 除了一个指向链表首元素的引用(称为head)之外,还需要跟踪另一个指向链表末元素的引用(称为tail)还需要一个整型变量count来跟踪队列中的元素数目
  2. 对于单向链表,可选择从末端入列,从前端出列。但双向链表可以解决遍历列表的问题,无所谓从哪端入列出列。
  • 用数组实现
  1. 队列修改会修改集合两端,因此讲一端固定于索引0处要求移动元素,非环形数组实现的元素移位,将产生O(n)的复杂度。
  2. 环形数组:最后一个引索后面跟的是第一个引索

    这个是实例化一个包含initialCapacity个泛型对象的数组的正确方法
    queue = ((T[])(New Object[initialCapacity]))

  • 双端队列

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

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

  • 问题1:书上说,“在栈中,其处理过程只在栈的某一段进行;而在队列中,其处理过程可以在两端进行”具体的意思及其他的区别是什么?
  • 问题1解决方案:

    某一段及两端的区别:

    栈和队列是两种限定性的数据结构,它们限定了插入和删除数据元素的位置,在表的两端进行。
    栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表。
    队列(Queue)是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。

    其他区别:

    1. 队列先进先出,栈先进后出
    2. 遍历数据速度不同。栈只能从头部取数据 遍历整个栈最后才能取出来,同时开辟临时空间。队列基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,速度要快的多。
    3. 上面那个
  • 问题2:请问这个问题是什么!
  • 问题2解决方案:想不出来,我也好无奈哦.解决聊!

代码调试中的问题和解决过程

  • 问题一:做pp5.2的时候题目要求自己编写toString方法,但是编完之后就提示有错误,错误在自己遍的toString方法上。
  • 问题一解决方案:之前看书的时候没有注意这一句:“toString会变得更加复杂,因为元素不是从0处开始存储的,而且还可能会环绕数组的末端。”而我之前是直接复制5.1中的toString方法改的,所以出现了问题,发现问题重新改过之后就没有报错了

代码托管

上周考试错题总结

结对及互评

  • 博客中值得学习的或问题:
    书上代码的学习很到位
    代码调试环节比较详细,从截图上来看注释也很规范整齐,值得学习。
  • 基于评分标准,我给本博客打分:11分。得分情况如下:
    正确使用Markdown语法(加1分)
    模板中的要素齐全(加1分)
    教材学习中的问题和解决过程, 加4分
    代码调试中的问题和解决过程, 加4分
    本周有效代码超过300分行,加2分
    进度条中记录学习时间与改进情况的加1分

点评过的同学博客和代码

  • 本周结对学习情况

    • 结对同学学号21
    • 结对学习内容
      • 一起讨论了那个initialCapacity的问题,最后一致决定改为100

其他(感悟、思考等,可选)

课后调查:

skills 课前评估(0...9) 课后评估(0...9)
Programming Overall/对编程整体的理解 3 8
Programming:Comprehension/程序理解 4 9
Programming:Performance/效能改进和分析 5 8
Programming:Code Review/代码复查 3 9
Programming:Test/单元测试 5 9

学习进度条

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

参考资料

原文地址:https://www.cnblogs.com/amberR/p/9710798.html

时间: 2024-08-03 12:21:51

20172324 2018-2019-1 《程序设计与数据结构》第三周学习总结的相关文章

20172324 2018-2019-1 《程序设计与数据结构》第一周学习总结

20172324 2018-2019-1 <程序设计与数据结构>第一周学习总结 教材学习内容总结 概述 软件质量 准确性:软件提供的功能是否正确(用户需要的) 可靠性:产品在规定的条件下,在规定的时间内完成规定功能的能力 健壮(易恢复)性:系统失效后,重新恢复原有的功能和性能的能力 可用性:在指定使用条件下,产品被理解. 学习.使用和吸引用户的能力 可维护性:在规定条件下,规定的时间内,使用规定的工具或方法修复规定功能的能力 可重用性:软件组建可用于其他软件开发的难易程度 可移植性:从一种环境

20172305 2017-2018-2 《程序设计与数据结构》第一周学习总结

20172305 2017-2018-2 <程序设计与数据结构>第一周学习总结 教材学习内容总结 本书的第一章简单的介绍了计算机和JAVA的历史,基础内容很多,代码的讲解还没用正式进入,本周一直在做敲代码的准备,简单敲了老师给的"Hello World!"以及书后的PP1.3.PP1.4等简单的小程序. 教材学习中的问题和解决过程 问题1:三种不同类型的错误,运行错误和逻辑错误的混淆 问题1解决方案:针对EX1.20的"希望做加法时却做里乘法"进行了网上

20172314 2017-2018-2 《程序设计与数据结构》第一周学习总结

20172314 2017-2018-2 <程序设计与数据结构>第一周学习总结 教材学习内容总结 本书第一章为计算机系统概述,前面是一些计算机相关的基础知识,让我对计算机有了一个总体的认识,不再是一片空白了,对主存储器和CPU影响深刻,主存储器用于保存程序和数据,CPU执行程序指令.在接下来的Java编程语言与程序开发部分,开始看的时候有点迷茫,不是很理解,后来先按照作业中附带的流程完成一些代码托管之后,接触了完整的简单的程序之后,再回过头来看书,看到的一些陌生的名词在脑海中就有了实际的对应,

20172317《程序设计与数据结构》第一周学习总结

20172317 2017-2018-2 <程序设计与数据结构>第一周学习总结 教材学习内容总结 重新温习了一遍计算机的基础 总算了解了局域网广域网因特网万维网这些东西之间的区别了 通过URL的例子知道了网址各个部分的含义 对Java编程语言和程序开发有了一个粗浅的了解 教材学习中的问题和解决过程 问题:练习题SR1.13出现了答案与题目不相符的情况 问题解决方案:题中有个选项是"网卡",答案中没有,反而有个题目没有的选项"调制解调器"(俗称"

20172322 2017-2018-2 《程序设计与数据结构》第二周学习总结

20172322 2017-2018-2 <程序设计与数据结构>第二周学习总结 教材学习内容总结 了解了print与println的区别 了解了字符串的拼接可以用+来完成 了解了转义字符的使用 学会了使用赋值 学会使用部分算术运算符 学会了使用Scanner来实现交互性 教材学习中的问题和解决过程 问题1:在最初接触赋值时对foalt和double的赋值范围不了解 问题1解决方案:使用万能的度娘后看到一个高赞答案后有了了解 问题2:在提前预习时看到2.7图形后敲入的代码无法执行 问题2解决方案

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

20172328李馨雨<程序设计与数据结构>第二周学习总结 又到周五,李馨雨同学要开始写博客了.让我们开始吧!(????) 教材学习内容总结 1.首先是String类定义的字符串,然后是print和println的区别.转义字符的学习.(让我印象深刻的\b[回车符]在字符串结尾不显示哈哈,及其更新的\t[换行符],还有在课堂上真正明白了什么是回车.) 2.了解变量.常量.赋值语句.变量:保存数据的内存单元.常量:坚定自己不会变的数据!除非你用java的反射(有点复杂,改权限.去修饰符等等.没实

20172327 2017-2018-2 《程序设计与数据结构》第二周学习总结

20172327 2017-2018-2 <程序设计与数据结构>第二周学习总结 教材学习内容总结 字符串的拼接和转义序列的使用 变量的声明和使用 讨论语法及表达式的处理 定义数据转换类型和实现类型转换的机制 创建Scanner类 教材学习中的问题和解决问题 暂无 代码学习中的问题和解决过程 问题1:在提交过程中,突然遇到无法上传的情况 问题2解决方案:通过上网查找,输入git pull之后弹出一个编辑框,选择关闭之后,再次用git push就成功了. 问题2:在按照例题2.10打代码时,Jav

学号20172328《程序设计与数据结构》第九周学习总结

学号20172328<程序设计与数据结构>第九周学习总结 教材学习内容总结(异常和递归) 第11章:异常 1.[异常处理]: 一个异常:是一个定义非正式情况或错误的对象,由程序或者运行时环境抛出,可以根据需要捕获和处理. 错误:错误类似于异常,但是错误代表不可恢复的问题并且必须捕获处理. 2.[处理异常的三种方法]:①根本不处理异常②当异常发生时处理异常③在程序的某个位置集中处理异常. 3.[未捕获的异常]:如果程序中不处理异常,则程序将非正常的终止运行,并产生关于描述在何处发生什么异常的信息

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

学号 20172326 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常(exception):定义非正常情况下或错误的情况的对象,由程序或运行时环境抛出,可根据需要进行相应的捕获处理. 异常与错误的区别:错误代表不可恢复的问题并且必须捕获处理.而异常可以忽视,或者使用try语句处理,或调用更高级的方法. 可检测异常与不可检测异常:可检测异常必须由方法捕获,或者必须在可能抛出或传递异常方法的throws子句中列出来.在方法定义的声明头中追加一条throws子句.不可检测异常不需要使

20172322 2017-2018-2 《程序设计与数据结构》第九周学习总结

20172322 2017-2018-2 <程序设计与数据结构>第九周学习总结 教材学习内容总结 异常 学会了使用try-catch来实现未捕获的异常的处理.可以使得异常被捕获进而不导致程序出现错误退出.使用try写入可能产生异常的语句,使用catch来编写在捕获异常后继续执行的代码(可以为空). "未捕获的异常"指在编译过程中不会被编译软件显示异常但是在运行时会出现异常导致程序直接退出,例如:"ArithmeticException"."In