队列课下作业
队列课下作业
作业要求
- 1 补充课上没有完成的作业
- 2 参考15.3节,用自己完成的队列(链队,循环数组队列)实现模拟票务柜台排队功能
- 3 用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息
- 4 把代码推送到代码托管平台
- 5 把完成过程写一篇博客:重点是单步跟踪过程和遇到的问题及解决过程
- 6 提交博客链接
一、补充课上没有完成的作业:将《Java程序设计与数据结构教程(第二版)》15章的15.5链表队列的代码中的dequeue()、first()、isempty()、size()、toString()实现:
package ch15;
/**
* Created by Funny_One on 2017/10/10.
*/
public class LinkedQueue<T> implements Queue<T> {
private int count;
private LinearNode<T> front,rear;
//Creates an empty queue
public LinkedQueue(){
count =0;
front = rear = null;
}
@Override
public void enqueue(T element) {
LinearNode<T> node = new LinearNode<T>(element);
if(count == 0){
front = node;
}else {
rear.setNext(node);
}
rear = node;
count++;
}
@Override
public T dequeue() throws EmptyCollectionException{
T element = front.getElement();
if(count == 1){
front = rear = null;
}else {
front = front.getNext();
}
count--;
return element;
}
@Override
public T first() {
T element = front.getElement();
return element;
}
@Override
public boolean isEmpty() {
boolean judge=false;
if (count == 0){
judge = true;
}
return judge;
}
@Override
public int size() {
return count;
}
@Override
public String toString(){
String str1 = "<The head of the queue>";
LinearNode<T> node = new LinearNode<T>();
node = front;
while (node!=null){
if(node.getNext()==null){
str1 += " "+ node.getElement() + " <The tail of the queue>";
}else {
str1 += " "+node.getElement()+",";
}
node = node.getNext();
}
return str1;
}
}
二、参考15.3节,用自己完成的队列(链队,循环数组队列)实现模拟票务柜台排队功能
三、用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息
队列分析(只列取至有两位售票员的情况)
处理一个顾客需要的时间是120秒,下一个顾客距离上一个顾客到达的时间是15秒。
当一个售票员的时候:
当只有一个售票员的时候,顾客都得到这个售票员这里买票,根据上面的条件,当该售票员处理一个顾客的时候,后面可以来8个顾客等待(120/15)。用99除以8(由于第一个到的已经开始在处理,所以要100-1),可以得到12余3,根据该情况,需要处理13个顾客后才能100个顾客全部到齐。
当两个售票员的时候:
根据代码的调试,顾客排队的顺序是顾客的数量平均分给顾客,当两个人的时候,可以理解成一个售票员处理50名顾客,用49除以8,可以得到6余1,就是说要处理7个顾客后50人才能到齐。
后面的情况大同小异,可以如此类推。