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

20172319 2018.09.17-09.23

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

目录

教材学习内容总结
第五章 队列:
  • 5.1 概述:
  • 队列(queue): 一种线性集合,其元素从一端加入,从另一端删除。处理方式: 先进先出(First In First Out, FIFO)。
  • 比较FIFO与LIFO两种处理方式:
    • 栈中:处理过程只在栈的某一端;
    • 队列中:处理过程可在两端进行。
      1334495-20180925230808903-464590666.png
  • 队列的操作

  • 操作说明
    enqueue向队列末端添加一个元素
    dequeue从队列前端删除一个元素
    first考察队列前端的那个元素
    isEmpty判定队列是否为空
    size判定队列中的元素数目
    toString返回队列中的字符串表示
  • 5.6 用链表实现队列:
  • 队列与栈的主要差别: 要操作链表的两端。
  • 1.需创建两个引用:一个指向链表首元素(head),一个指向链表末元素(tail);
  • 2.另需一个整型变量count来跟踪队列中的元素数目;
  • 3.若链表是单向链接,则应区分往链表的哪端添加或入列元素与从哪端删除或出列元素;
  • 4.enqueue操作中,往前端和末端的添加新元素对应的处理步骤相似:新节点的next指向head,然后head指向新节点;
  • 5.dequeue操作则有所区别:
    • 1.表末端enqueue,表前端dequeue,在进行dequeue时,只需设置一个临时变量指向链表前端的元素,然后把front变量设置为第一个结点的next指针的值;
    • 2.表前端enqueue,表末端dequeue,需把一个临时变量设置为指向链表末端的元素,然后将tail指针设置为指向当前末端之前的结点。
  • 双向链表可以解决遍历链表的问题,因此无所谓从哪端出入列。
    1334495-20180926000425494-997059304.png

  • 5.7 用数组实现队列:
  • 将队列的某一端固定在数组的索引0处,所有元素不间断地存放在数组中。
  • 元素移位,dequeue的复杂度为O(n);
  • 用固定数组实现栈的效率并不高;
  • 环形数组(circular array),数组的最后一个索引后面跟的是第一个索引;可以去除在队列的数组实现中元素移位的需要

  • 5.8 双端队列(Deque):
  • 队列的扩展,允许从队列的两端添加、删除和查看元素。

返回目录


教材学习中的问题和解决过程
  • 问题1:链表编成栈,编成队列;数组编成栈,编成队列,你换来、我换去的有什么用?
  • 解决:
  • 数组、链表、栈和队列是最基本的数据结构,任何程序语言都会涉及到其中的一种或多种;

    数组:

    1334495-20180926224815777-1759672739.png

    链表:

    1334495-20180926224911445-887821241.png

返回目录


代码调试中的问题和解决过程
  • 问题1:队列前端位置元素丢失。
    1334495-20180926234927858-791056355.png
  • 20172301并不在队列里;
  • 解决:
  • 通过对代码顺序的更换,我们发现tostring和first两个方法的内容发生了冲突;
    1334495-20180926235350149-1343307500.png
    1334495-20180926235359522-400171561.png
  • 最后通过对方法的代码调试,发现在队头的元素已被修改,所以导致并非预期元素:
    1334495-20180926235615694-1675470420.png
  • 通过将其修改,最终实现了预想的效果:
    1334495-20180926235910984-1794139059.png

返回目录


代码托管

1334495-20180927000100977-1767326412.png

返回目录


上周考试错题总结
  • 错题1:无。

  • 解决:

  • 错题2:

  • 解决:

返回目录


结对及互评
点评过的同学博客和代码
  • 本周结对学习情况
    • 20172316赵乾宸
    • 博客中值得学习的或存在问题:
    • 20172329王文彬
    • 博客中值得学习的或存在问题:
    • 博客内容充实、排版整齐、对教材内容有经过一番认真思考、继续保持。

返回目录


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

返回目录


学习进度条
代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)
目标3000行15篇300小时
第一周0/01/112/12
第二周935/9351/224/36
第三周849/17841/334/70

返回目录


补充作业
技能课前评估课后评估
对编程整体的理解38
程序理解5.58
代码质量47
架构设计、模块化设计、接口设计37
效能分析和改进2.56
处理大数据2.57

返回目录


参考资料

数据结构(Java实现)之单向链表的节点表示、插入、删除、单向链表反转和串联
【数据结构】链表的原理及java实现
java集合包总结(添加、删除等操作实现原理)

返回目录

转载于:https://www.cnblogs.com/Tangcaiming/p/9703809.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值