Javascript中队列
function Queue() {
this.items = [];
Queue.prototype.enqueue = function (item) {
this.items.push(item);
}
Queue.prototype.dequeue = function () {
return this.items.shift();
}
Queue.prototype.front = function () {
return this.items[0];
}
Queue.prototype.isEmpty = function () {
return this.item.length == 0;
}
Queue.prototype.size = function () {
return this.items.length;
}
Queue.prototype.toString = function () {
var result = "";
for (var i = 0; i < this.items.length; i++) {
result += this.items[i] + " "
}
return result;
}
}
// 击鼓传花
function PassGames(namelist, num) {
var queue = new Queue();
for (var i = 0; i < namelist.length; i++) {
queue.enqueue(namelist[i]);
}
while (queue.size() > 1) {
// num 之前的人放到队列末尾
for (var i = 0; i < num - 1; i++) {
queue.enqueue(queue.dequeue());
}
// num对应的人淘汰掉
queue.dequeue();
}
var endName = queue.front();
alert(endName);
return namelist.indexOf(endName);
}
var names = ['lily', 'tom', 'jahn', 'lilei', 'guo'];
alert( PassGames(names, 3));
带优先级的队列
function PriorityQueue() { function QueueElement(element, priority) { this.element = element; this.priority = priority; } this.items = []; PriorityQueue.prototype.enqueue = function (element, priority) { var queueElement = new QueueElement(element, priority); // 判断队列是否为空 if (this.items.length == 0) { this.items.push(queueElement); } else { // 判断当前有没有插入 var added = false; for (var i = 0; i < this.items.length; i++) { if (queueElement.priority < this.items[i].priority) { this.items.splice(i, 0, queueElement); added = true; break; } } if (!added) { this.items.push(queueElement); } } } PriorityQueue.prototype.dequeue = function () { return this.items.shift(); } PriorityQueue.prototype.front = function () { return this.items[0]; } PriorityQueue.prototype.isEmpty = function () { return this.item.length == 0; } PriorityQueue.prototype.size = function () { return this.items.length; } PriorityQueue.prototype.toString = function () { var result = ""; for (var i = 0; i < this.items.length; i++) { result += this.items[i].element + '-' + this.items[i].priority + ' '; } return result; } } var pq = new PriorityQueue(); pq.enqueue('aaa', 110); pq.enqueue('bbb', 120); pq.enqueue('ccc', 14); pq.enqueue('ddd', 22); alert(pq.toString());

浙公网安备 33010602011771号