Javascriptでキューを実現します.
22962 ワード
githubホームページ:https://github.com/A15162252289
行列とは
キューは、FIFO(First In First Out)原則に従う順序付けされたセットのアイテムである.キューに新しい要素を追加し、上から要素を削除します.新しく追加した要素は列の最後に並べなければなりません.コンピュータ科学では、よくある例として、印刷キューがあります.例えば、私たちは5つの文書を印刷したいです.文書ごとに開けて、印刷ボタンをクリックします.各文書は印刷キューに送信されます.最初の印刷キューに送信すると優先的に印刷されます.すべてのドキュメントが印刷されるまで、1回で類推されます.
どうやって列を実現しますか構築関数を用いてキュー を実現する.
行列とは
キューは、FIFO(First In First Out)原則に従う順序付けされたセットのアイテムである.キューに新しい要素を追加し、上から要素を削除します.新しく追加した要素は列の最後に並べなければなりません.コンピュータ科学では、よくある例として、印刷キューがあります.例えば、私たちは5つの文書を印刷したいです.文書ごとに開けて、印刷ボタンをクリックします.各文書は印刷キューに送信されます.最初の印刷キューに送信すると優先的に印刷されます.すべてのドキュメントが印刷されるまで、1回で類推されます.
どうやって列を実現しますか
function Queue () {
let items = []; //
this.enqueue = function (element) {
items.push(element); //
};
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; //
};
}
実用化:let queue = new Queue();
queue.isEmpty(); //true
queue.enqueue(2); // 2
queue.size(); //1
queue.dequeue(); // 2
2.***ES 6**クラスを使ってキューを実現するlet Queue2 = (function () {
const items = new WeakMap();
class Queue2 {
constructor () {
items.set(this, []);
}
enqueue (element) {
let q = items.get(this);
q.push(element); //
}
dequeue () {
let q = items.get(this);
let t = q.shift();
return t; //
}
front () {
let q = items.get(this);
return q[0]; //
}
isEmpty () {
let q = items.get(this);
return q.length === 0; //
}
size () {
let q = items.get(this);
return q.length; //
}
}
return Queue2;
})();
3.優先キューの実現:function PriorityQueue () {
let items = [];
function QueueElement (element, priority) {
this.element = element;
this.priority = priority;
}
this.enqueue = function (element, priority) {
let queueElement = new QueueElement(element, priority); //
let added = false;
items.forEach((item, index) => {
if (queueElement.priority < item.priority) {
items.splice(index, 0, queueElement);
added = true;
return false;
}
}); // , queueElement , queueElement ,
if (!added) {
items.push(priority);
}
};
//
}
4.循環キューの実現:// ----
function hotPotato (nameList, num) {
if (!(nameList instanceof Array)) {
throw new Error(' nameList');
}
if (typeof num !== 'number') {
throw new Error(' ');
}
let queue = new Queue(); //
nameList.forEach(item => {
queue.enqueue(item);
});
let eliminated = ''; //
while (queue.size() > 1) {
for (let i = 0; i < num; i++) {
queue.enqueue(queue.dequeue());
}
eliminated = queue.dequeue(); //
console.log(eliminated + ' is out');
}
let winner = queue.dequeue();
console.log('winner is ' + winner);
}
実用化:let nameList = [1, 2, 3, 4, 5, 6, 7];
let num = 5;
hotPotato(nameList, num);
// :
// 6 is out
// 5 is out
// 7 is out
// 2 is out
// 1 is out
// 4 is out
// winner is 3
Githubソースコード:link.