队列
发表于 2017-12-15 10:41:49 | 分类于 算法 |
队列的定义
队列是遵循先进先出原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。
队列的方法
enqueue(element):向队列末尾添加一个新的项。
dequeue():移除队列的第一项(即排在队列最前面的项),并返回被移除的元素。
clear():清空队列。
front(): 返回队列中第一个元素(最先被添加、也将是将是最先被移除的元素)。队列不做任何变动。
isEmpty():如果队列中不包含任何元素,返回 true,否则返回 false。
size():返回队列包含的元素的个数。
创建队列
用一个类来表示队列
function Queue() {
// 用一个数组来存储队列的元素
var items = [];
// 队列的方法
this.enqueue = function(element) {
items.push(element);
};
this.dequeue = function() {
return items.shift();
};
this.clear = function() {
items = [];
};
this.front = function() {
return items[0];
};
this.isEmpty = function() {
return items.length === 0;
};
this.size = function() {
return items.length;
};
this.print = function() {
console.log( items.toString() );
};
}
优先队列
优先队列的元素的添加和移除,是基于优先级的。
实现一个优先队列,有两种选项:设置优先级,然后在正确的位置添加元素;或者用入列操作添加元素,然后按照优先级移除它们。
以下实现将会在正确的位置添加元素,因此,可以对它们使用默认的出列操作。
优先队列的创建
function PriorityQueue() {
// 用一个数组来存储队列的元素
var items = [];
function QueueElement (element, priority) {
this.element = element;
this.priority = priority;
}
// 队列的方法
// priority 值越大,优先级越小
this.enqueue = function (element, priority) {
var queueElement = new QueueElement(element, priority);
if ( this.isEmpty() ) {
items.push( queueElement );
} else {
var added = false;
for (var i = 0; i < items.length; i++) {
if ( queueElement.priority < items[i].priority ) {
items.splice(i, 0, queueElement);
added = true;
break;
}
}
if (!added) {
items.push( queueElement );
}
}
}
// 其余方法和默认的 Queue 实现相同
}