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. 对于单向链表,可选择从末端入列,从前端出列。但双向链表可以解决遍历列表的问题,无所谓从哪端入列出列。
  3. 1332976-20180928105224423-85613274.png
  • 用数组实现
  1. 队列修改会修改集合两端,因此讲一端固定于索引0处要求移动元素,非环形数组实现的元素移位,将产生O(n)的复杂度。
  2. 环形数组:最后一个引索后面跟的是第一个引索

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

  • 双端队列

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

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

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

    某一段及两端的区别:

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

    其他区别:
    1. 队列先进先出,栈先进后出
    2. 遍历数据速度不同。栈只能从头部取数据 遍历整个栈最后才能取出来,同时开辟临时空间。队列基于地址指针进行遍历,而且可以从头或尾部开始遍历,但不能同时遍历,无需开辟临时空间,速度要快的多。
    3. 上面那个
  • 问题2:请问这个问题是什么!
    1332976-20180926233456832-1567365566.jpg

  • 问题2解决方案:想不出来,我也好无奈哦.解决聊!
    1332976-20180926233549270-1034492551.png

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

  • 问题一:做pp5.2的时候题目要求自己编写toString方法,但是编完之后就提示有错误,错误在自己遍的toString方法上。
    1332976-20180926233612213-1771673807.png

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

代码托管

上周考试错题总结

结对及互评

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

点评过的同学博客和代码

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

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

课后调查:

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

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周01/120/20
第二周300/5001/218/38
第三周300/6001/318/38

参考资料

转载于:https://www.cnblogs.com/amberR/p/9710798.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值