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

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

教材学习内容总结

第五章主要对队列进行了介绍,队列从一端进入从量一端删除,队列遵循先进先出的原则(First in First out FIFO)
队列ADT应该包含的方法:

操作 说明
enqueue 向队列末端添加一个元素
dequeue 从队列前端删除一个元素
first 考察队列前端的那个元素
isEmpty 判定队列是否为空
size 判断队列中的元素数目
toString 返回对列的字符串表示

java集合API提供了java.util.Stack类,它实现了栈集合。没有提供队列类。而是提供了一个Queue的接口,由多个类实现
队列的应用:
代码密钥:使用队列储存密钥,可以重复使用,对密文进行加解密。
售票口模拟:现创立一个Customer类,储存顾客的时间。使用队列模拟客户的实践,进行试验来模拟售票口的情况,最后确定最佳的售票口数量。
队列的实现:
使用链表实现队列:需要定义两个指针,一个head,一个tail,还有一个统计元素数量的int值count,方便在队首和队尾,进行插入和删除。双向链表实现比单链表容易。
使用数组实现队列:用两个整数型变量rear,和front来表示数组的头和尾(注意在这里,两个整数型不代表储存的位置,而是表示队列的顺序,在采用环形数组是,更要注重对rear和front把握,否则就会丢失队列中的数据)

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

  • 问题1:有关环形数组的相关问题。
  • 问题1解决方案:一开始真的很懵懂,环?怎么能把数组掰弯!变成一个环?后来经过长期的艰苦奋斗,终于理解了,这个环,在我的理解中并不是一个真正的环而是一个逻辑上的环,通过两个索引值进行标记确定首尾,尾索引可以借助“rear =(rear+1)%queue.length”这条语句在到达索引值上线时过渡到数组的首端,从而在真正的逻辑上形成一个真正环形数组。

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

  • 问题1:在进行测试时发现无法引用变量。还有toString方法没有办法正常调用

  • 问题1解决方案:后来发现是没有加运行函数。还有在toString的函数里没有将那个环形数组中开头的索引值随循环做自减运算。

  • 问题2:发现一堆错误。

  • 问题2解决方案:最终发现是自己实现的isEmpty方法有问题,后将if的判断语句由(head.getelementnull)改为(headnull)就OK了。

代码托管

补充作业

技能 课前 课后
Programming: Comprehension(程序理解) (如何理解已有的程序,通过阅读,分析,debug) 4 7
Programming: Design (架构设计, 模块化设计,接口设计) 2 6
Programming: Test (单元测试、代码覆盖率) 2 4
Program: Performance (效能分析和改进) 1 5
Programming: Code Review/Code Quality (代码复审/代码规范/代码质量) 1 3
Programming: Command line and files (处理命令行参数和文件系统) 1 4
Personal Software Process (个人软件过程) :个人源码管理(TFS/GitHub) 3 7

博客互评

  • 博客中值得学习的或问题:
    20172301 郭恺同学本周的博客局以往来看略显逊色,内容不够饱满。不过对教材的知识深入的了解了。并且也吸收了学姐上周给他的评价,对教材上的知识总结进行了加深。
    20172328 李馨雨同学 不亏为学习部的经营教材内容总结的详略得当,井井有条,对问题的理解和反省也十分到位,那一手环形数组的图片更是深深的折服了我。

点评过的同学博客和代码

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

   本周经过了紧张而充分的学习,学会了用链表实现队列用数组实现队列等。还接触到了存在于逻辑上的数组——“环形数组”。感觉自己从灵魂上的到了升华。路漫漫其修远兮,吾将上下而求索。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 30/30 1/1 10/10
第二周 766/796 1/2 40/50
第三周 817/1613 1/3 20/7

参考资料

1.蓝墨云班课
2.java软件结构与数据结构

posted @ 2018-09-26 15:09  段志轩  阅读(155)  评论(2编辑  收藏  举报