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

本文总结了《程序设计与数据结构》课程中队列的学习内容,包括队列与栈的区别、Java API中的队列接口和方法,以及使用链表和环形数组实现队列的过程。通过代码调试和结对学习,深入理解了队列的操作如enqueue和dequeue。
摘要由CSDN通过智能技术生成

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

教材学习内容总结

在上周学习完关于栈的知识过后,这周我们学习了关于队列的知识。

  • 队列与栈最大的不同就是队列是FIFO(先进先出)。
  • 在Java API中提供了栈,但是却没有提供队列类,但是它却提供了一个Queue接口,这个接口由多个类来实现。在Queue接口中定义了一个element方法,用于得到队列前端的值,提供了两个方法addoffer用于添加和插入元素,另外pollremove从队列中删除元素。
  • 代码密钥是队列使用的一个鲜明的例子,利用队列储存密钥可以使得代码密钥得以多次使用。
  • 和上周类似,本周也是分别通过链表和数组的形式来实现队列。与StackADT类似,这次也有一个名为QueueADT的接口,我们的主要任务也是实现它的enqueue dedqueue first isEmpty size toString
    • 链表方式实现队列:enqueue操作,在队列末端添加一个新元素,将当前末尾元素的next引用指向需要添加的新元素,并且将tail引用设置为新元素。dequeue操作删除队列前端的元素直接令head = head.getNext即可,不过需要注意当删除掉队列的最后一个元素后,headtail的引用都是null。其他需要实现的内容在后面部分会提及。
    • 数组方式实现队列:普通的线性数组在处理队列问题时的空间复杂度很高,故在书中使用了环形数组来实现队列(环形数组:数组的最后一个索引后面跟的是第一个索引),enqueue dedqueue 的实现引入了取余操作符%以便rearfront的值无误。

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

  • 问题1:书上有一句话“对于队列,我们是在其两端进行操作的,而顺序也不是无关紧要的了,因此,用固定数组来实现的效率不高”,我当时读到这句话的时候十分疑惑,队列的顺序很重要所以实现栈的效率不高?
  • 问题1解决方案:对比之前书上所提到的“固定数组实现策略是对栈高效的”,并且在网上查阅资料得到,这句话是书本的一个问题,应该是“用固定数组来实现队列的效率不高”

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

在上周学习了分别使用链表和数组来实现栈以后,本周利用数组和链表来实现对流相对简单,仅需要对部分代码进行修改即可,但还是存在了一个问题:

  • 问题1:在对环形数组类CircularArrayQueue进行补全时前面几个方法都比较简单,但是sizetoString方法出现了问题。
  • 问题1解决办法:经过一系列的验证发现问题的产生是出现size方法上,因为toString方法调用了size
  • 解决这次问题我使用了三种方法:

  • 第一种:1333109-20180925152037269-110199852.png

  • 导致的问题:1333109-20180925151501673-257942287.png

导致了数组的长度为1600,并且出现了非常多的null。

  • 第二种:1333109-20180925152048809-1919123765.png

  • 导致的问题:1333109-20180925151518117-1320640900.png

size方法调用显示的还是删除以前的样子。

  • 第三种:1333109-20180925152101202-934566117.png

  • 1333109-20180925151526591-306618410.png

我在网上查阅相关资料(《JAVA-循环数组实现简单的队列》)以后,问题终于得以解决。

代码托管

1333109-20180925151845832-2068410040.png

上周考试错题总结

上周没有考试,故也没有错题。

结对及互评

  • 博客中值得学习的或问题:
    • 在她的博客中“循环队列”和“顺序队列”使用了图解的方法,更便于理解。
  • 代码中值得学习的或问题:
    • 在博客中体现了许多代码,更加方便,值得学习

点评过的同学博客和代码

  • 本周结对学习情况
    • 20172303

    • 结对学习内容
      • 主要讨论了蓝墨云的课堂实践内容,对于用链表实现插入和删除的功能进行了深入地探讨

其他

  • 感悟:学会了基本的链表与数组的知识过后对于利用这两者来实现无论是栈或是队列都比较简单。

课本单词

(本部分用于收集本章节后的生词)

  • Ceasar cipher:凯撒加密法
  • circular array:环形数组
  • dequeue:队列操作,前端删除一个元素
  • enqueue:队列操作,尾端增加一个元素
  • FIFO:先进先出
  • queue:队列
  • repeating key:重复密钥

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周0/50002/28/8认真学习!积极向上
第二周812/8121/322/30
第三周814/16261/420/50
  • 计划学习时间:20小时

  • 实际学习时间:20小时

  • 改进情况:继续加紧学习的脚步。

补充作业

技能课前评估课后评估
对编程整体的理解48
程序理解48
构架设计,模块化设计,接口设计38
单元测试,代码覆盖率59
代码质量38
效能分析和改进27

参考资料

转载于:https://www.cnblogs.com/zhangyeye233/p/9699649.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值