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

Posted amberr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

参考资料

以上是关于20172324 2018-2019-1 《程序设计与数据结构》第三周学习总结的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

20172324《Java程序设计》第二周学习总结

20172324 2017-2018-2《程序设计与数据结构》实验4报告

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