佇列課下作業
作業要求
- 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人才能到齊。
後面的情況大同小異,可以如此類推。