队列课下作业
题目
1 补充课上没有完成的作业
2 参考15.3节,用自己完成的队列(链队,循环数组队列)实现模拟票务柜台排队功能
3 用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息
4 把代码推送到代码托管平台
5 把完成过程写一篇博客:重点是单步跟踪过程和遇到的问题及解决过程
6 提交博客链接
代码链接
问题
遇到的最主要的问题就是在队列的实现上,我在自己实现了部分的方法之后没有进行测试类的编写导致我在实现代码的时候才发现,出队的操作上存在问题,并在单步追踪之后发现并解决了这个问题。
就比如说:在进行出队操作的时候,由于对front的操作不恰当导致了循环数组并没有实现,而是出现了数组越界异常的现象,在这个问题上纠结的时间比较的多:
@Override
public T dequeue() throws EmptyCollectionException
{
T re = queue[front];
queue[front] = null;
front = front +1;
count --;
return re;
}
原先我就写出了如上的代码导致front一直增大,最后就出现了数组越界异常的问题,从而使first方法没有办法获取元素。
后来我经过单步追踪就发现了front一直增大而没有回原点的问题,之后就借鉴了课本上入队操作的很巧妙的一步:
rear = (rear+1) % queue.length;
借鉴了这一步之后我就将原先的代码改为下面的这种代码,也就解决了上面的越界异常的问题
@Override
public T dequeue() throws EmptyCollectionException
{
T re = queue[front];
queue[front] = null;
front = (front +1) % queue.length;
count --;
return re;
}
图
- 单步追踪
- 出队入队
- 等待时间和服务员人数的函数关系;
- 队列变化图