佇列,就是排隊,先到的站前面,先離開,後到的排後面,後離開。對應到計算機中,就是新增元素在隊尾,刪除元素是在隊頭,先進先出或後進後出。新增元素也叫入隊(enqueue),刪除元素也叫出隊(dequeue)。當然還可以檢視隊頭元素,隊中元素個數,以及是否為空,所以佇列提供了api 就是enqueue, dequeue,getfront, size, isempty。
使用鍊錶實現佇列
鍊錶需要維護兩個指標,頭指標和尾指標。頭指標指向鍊錶的頭部,用於出隊,因為鍊錶頭部容易執行刪除操作。尾指標指向鍊錶尾部,用於入隊,因為鍊錶尾部容易新增元素。煉表頭就是隊頭,鍊錶尾就是隊尾。
public class linkedqueueenqueue的實現:建立乙個新節點,如果佇列(鍊錶)為空,直接讓頭尾指標都指向它}private node firstnode; //頭指標,隊頭
private node lastnode; // 尾指標,隊尾
private int size;
public void enqueue(t data){}
public t dequeue(){}
public int size(){}
public boolean isempty(){}
public t getfront(){}
public void clear(){}
}
如果鍊錶不空,讓尾節點的next指向它,同時更新尾指標的指向,讓它指向最新的尾節點
publicdequeue的實現,鍊錶為空,肯定是不能被刪除的,如果鍊錶不空,取出第乙個節點,然後讓頭指標指向它的next節點就好了,void
enqueue(t data)
else
size++;
}
那要注意的是一直刪除,頭指標會指向null,也就是鍊錶中沒有元素了,尾指標也要指向null
public其它幾個實現比較簡單t dequeue()
t frontdata =firstnode.data;
firstnode =firstnode.next;
if(firstnode == null
) size--;
return
frontdata;
}
public使用佇列模擬現實的佇列,比如買奶茶,以測算奶茶店的服務能力。如果要統計1小時內的服務能力,可以計算,在一小時內的到達人數,服務人數,等待時間等等。怎麼統計呢?1小時,可以分60分鐘,每一分鐘檢測一次,有沒有顧客來,如果有就加到佇列中,如果沒有,就看有沒有顧客在服務,如要有,就繼續服務,如果沒有,服務下一位顧客。怎麼知道有沒有人來?由於每乙個顧客的到達時間是隨機的,可以使用乙個隨機數,如果生成的隨機數小於乙個閾值,就說明有顧客到,反之,則沒有顧客到。 由於每個顧客的服務時間也不一樣,可以再使用乙個隨機數,計算出服務時間。可以看出有兩個類,waitline和customer,在waitline中有到達人數(numberofarrived),服務人數(numberserved), 等待時間(totaltimewaited),在customer中有到達時間(arrivetime),服務時間(transactiontime)和排隊號碼(customernum)。intsize()
public
boolean isempty()
public
t getfront()
return
firstnode.data;
}public
void
clear()
public現在模擬一下佇列的情形,顧客到來的時間是隨機的,假設有50%的概率會來,那就表示,只要生成的隨機數小於50%,就表明顧客到了,加入佇列。顧客的服務時間也是不固定的,可以宣告乙個最大服務時間,然後和隨機數相乘,假設最大服務時間是5s。顧客有沒有在服務,就是看它的服務時間有沒有到0,如果到了,就表示服務完成,到下一位顧客。class
waitline }}
//測試一下duration: 要統計的服務時間區間,比如60分鐘
//arrivalprobability:每秒鐘顧管到達的概率, 比如50%
//maxtransactiontime:每位顧客的最長服務時間
public
void simulate(int duration, double arrivalprobability, int
maxtransactiontime)
//某位顧客是否還在服務中
if (transactiontimeleft > 0
) else}}
}
publicstatic
void
main(string args)
用單鏈表實現佇列
規則 先進先出,後進後出 第一步 先初始化單鏈表結構。宣告兩個指標,乙個head指標指向頭部結點,乙個last指標指向尾部結點。初始化單鏈表時,頭部head指標和尾部last指標是重合的。用單鏈表實現佇列 author ouyangjun public class singlechaintableq...
單鏈表實現佇列 順序表實現佇列
一 sysutil.h 系統標頭檔案 include include include include include include include 記憶體洩漏工具的標頭檔案二 單鏈表實現佇列函式 include sysutil.h define queueelemtype int 鏈佇列typed...
單鏈表實現佇列鏈式儲存
用單鏈表實現佇列的鏈式儲存 fron指向單鏈表的頭結點,rear指向單鏈表的尾結點 因為單鏈表的頭結點做插入,刪除都比較方便,但是尾結點做插入方便,刪除不方便 故我們讓front指向頭結點利於做刪除操作,讓rear指向尾結點利於做插入操作 include include define element...