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

本次学习总结介绍了队列这一数据结构,包括其遵循的先进先出原则、ADT方法如enqueue、dequeue等,以及队列在代码密钥管理和售票口模拟中的应用。详细探讨了使用链表和数组实现队列的方法,特别是环形数组的逻辑实现。同时,分享了代码调试中遇到的问题及解决过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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方法没有办法正常调用
    1333068-20180926232316623-1812420782.png
    1333068-20180926232330233-1645204276.png

  • 问题1解决方案:后来发现是没有加运行函数。还有在toString的函数里没有将那个环形数组中开头的索引值随循环做自减运算。
  • 问题2:发现一堆错误。
    1333068-20180926232725530-833046175.png
    1333068-20180926232732152-566910763.png

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

代码托管

1333068-20180926233026020-276567441.png

补充作业

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

博客互评

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

点评过的同学博客和代码

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

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

学习进度条

代码行数(新增/累积)博客量(新增/累积)学习时间(新增/累积)重要成长
目标5000行30篇400小时
第一周30/301/110/10
第二周766/7961/240/50
第三周817/16131/320/7

参考资料

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

转载于:https://www.cnblogs.com/15248252144dzx/p/9707056.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值