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软件结构与数据结构