佇列
佇列遵循先進先出的原則的一種有序的項。
- enqueue(): 向佇列尾部新增一個(或多個)新的項
- dequeue(): 移除佇列的第一(即排在佇列最前面的)項,並返回被移除的元素
- front(): 返回佇列中第一個元素--最先被新增,也將是最先被移除的元素。佇列不做任何變動(不移除元素,只返回元素資訊--與Stack類的peek方法非常相似)。
- isEmpty(): 如果佇列中不包含任何元素,返回true,否則返回false
- size(): 返回佇列包含的元素個數,與陣列的length屬性相似
目錄
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="./queue.js"></script>
</head>
<body>
</body>
</html>
複製程式碼
queue.js
var Queue = function() {
var items = [];
//入隊
this.enqueue = function(el) {
items.push(el)
}
//出隊
this.dequeue = function() {
return items.shift();
}
// 隊頭
this.front = function() {
return items[0]
}
//隊是否為空
this.isEmpty = function() {
return items.length === 0;
}
//隊的長度
this.size = function() {
return items.length;
}
}
複製程式碼
例項化
queue-es6.js
class Queue {
constructor() {
this.items = [];
}
enqueue = function(el) {
this.items.push(el)
}
//出隊
dequeue = function() {
return this.items.shift();
}
// 隊頭
front = function() {
return this.items[0]
}
//隊是否為空
isEmpty = function() {
return this.items.length === 0;
}
//隊的長度
size = function() {
return this.items.length;
}
}
複製程式碼
佇列實現擊鼓傳花
玩家列表 ['a', 'b', 'c', 'd', 'e', 'f'];
,每第三個出隊,最後只留下一個
var Queue = function() {
var items = [];
//入隊
this.enqueue = function(el) {
items.push(el)
}
//出隊
this.dequeue = function() {
return items.shift();
}
// 隊頭
this.front = function() {
return items[0]
}
//隊是否為空
this.isEmpty = function() {
return items.length === 0;
}
//隊的長度
this.size = function() {
return items.length;
}
}
var chuanhua = function(names, number) {
var q = new Queue();
for (var i = 0; i < names.length; i++) {
q.enqueue(names[i])
}
var taotal;
while (q.size() > 1) { //q.size() == 1 時,停止
for (var i = 0; i < number - 1; i++) { //number=3,只迴圈2次
q.enqueue(q.dequeue()) //1.先把a出隊,然後入隊, 2.把b出隊,然後入隊
}
taotal = q.dequeue(); //c
console.log('淘汰玩家是:' + taotal)
}
}
//玩家列表
var names = ['a', 'b', 'c', 'd', 'e', 'f'];
//遊戲規則
var number = 3;
chuanhua(names, number)
複製程式碼
優先佇列
常景: 銀行vip辦理業務要優先於普通客戶
priorityQueue.js
var PriorityQueue = function() {
var items = [];
//輔助類
var QueueItem = function(el, priority) {
this.el = el;
this.priority = priority
}
this.enqueue = function(el, priority) {
var queueItem = new QueueItem(el, priority);
var added = false;
for (var i = 0; i < items.length; i++) {
if (queueItem.priority > items[i].priority) {
items.splice(i, 0, queueItem);
added = true;
break;
}
}
if (!added) {
items.push(queueItem);
}
}
this.getItems = function() {
return items;
}
}
複製程式碼
例項化
1.紅色 例項化 2. 入隊 3. 檢視佇列