队列课下作业

队列课下作业

作业要求

  • 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人才能到齐。

后面的情况大同小异,可以如此类推。

posted @ 2017-10-16 08:32  FunnyOne  阅读(267)  评论(0编辑  收藏  举报