队列实现15.4实现模拟票务柜台排队功能
队列课下作业
先附上我的代码链接表示诚意,chapter15、LinkedQueueTest
作业步骤
1.使用链表实现队列,需要补全书上的dequeue()
、isEmpty()
、first()
、size()
操作方法。
先解决dequeue()
public T dequeue() throws EmptyCollectionException {
//front.setNext(front.getNext().getNext());
//front.getNext().setNext(null);
T lxr = front.getElement();
while (count==1){
front=null;
rear=null;
break;
}
if (count!=1) {
//front.setNext(front.getNext().getNext());
front = front.getNext();
}
count--;
return lxr;
}
我设计了两种方法,第一种就是分号省略的内容,使front指向front下一个结点指向的对象,然后再使front原来指向的对象指向为空,测试结果没有返回值就失败了;第二个方法便是声明一个泛型,这样就会有返回值,考虑两种情况,当只有一个元素值时,让队头等于队尾,就直接使其为null,当不等于1时,front指向下下一个对象,并使总数count减一。
然后是first()
public T first() {
return front.getElement();
}
另其返回队头指向的对象。
其他几个方法和链表的一致,比较简单,就不一一阐述了
2.提交我的测试截图(由于我的电脑环境变量有问题,单步跟踪不了,我调试后也出了很多问题,我需要找老师帮忙调试我的JDK文件)
3.队列变化图
当只有一个售票员时
我画的队列变化图是不同人数的售票员对实时队伍排队人数的影响,如图1,第一部分情况就是当只有一个售票员时对队伍每隔120秒000就会有7(120/15-1)个人排队,
当进行到第二种情况时,即第12个120秒和第13个120秒之间,当排队人数为88人时,所有的100个顾客会到达完毕(100-84-12=4),后半部分图像就会以一次函数形式下降到0
当有两个售票员时
和第一个情况类似,即每过120秒会离开2名顾客,当排队人数为76(72+4)所有顾客会到达完毕,后半部分图像就会以一次函数形式下降到0
当有8个售票员时
综上两种情况可以得知在售票员人数少时图像都以一次函数形式先增长再下降的模式,所以其他情况就不予考虑,直接进入当有8名售票员时,图像会发生什么变化。
当有8名售票员时,由于120秒内会产生8名顾客,所有新来的顾客不会再等待。即排队人数为0,图像沿x轴延伸。
综合考虑后,当售票员小于8时图像以一次函数形式先增长再下降,当大于等于8时,图像沿x轴延伸