队列
基本概念
- 定义:在表一端进行插入操作,另一端进行删除操作的线性表。
- 队头:插入操作
队尾:删除操作 - 特点:先进先出
(图源网络)
方法
- enqueue:入列,向队列尾部增加一个元素
- dequeue:出列,移除队列头部的一个元素并返回被移除的元素
- front:获取队列的第一个元素
- isEmpty:判断队列是否为空
- size:获取队列中元素的个数
代码实现
function Queue() {
var collection = [];
this.print = function() {
console.log(collection);
}
this.enqueue = function(element) {
collection.push(element);
}
this.dequeue = function() {
return collection.shift();
}
this.front = function() {
return collection[0];
}
this.isEmpty() = function() {
return collection.length === 0;
}
this.size = function() {
return collection.length;
}
}
优先队列
基本概念
- 定义:带有优先级的队列
- 优先级:数值越小,优先级越高。
- 特点:出队操作是把队列中优先级最高的元素出队列。
- 实现:优先级高的元素入列时将排到低优先级元素之前(使用二维数组实现)
方法
- enqueue:入列,按照优先级排序插入,优先级高的将排在优先级低的之前(即值小的排在值大的之前)
- dequeue:出列,移除队列头部的一个元素并返回被移除的元素
- front:获取队列的第一个元素
- isEmpty:判断队列是否为空
- size:获取队列中元素的个数
代码实现
function PriorityQueue() {
var collection = [];
this.print = function() {
console.log(collection);
}
this.enqueue = function(element) {
if (this.isEmpty()) {
collection.push(element);
} else {
var added = false;
for (let i = 0; i < collection.length; i++) {
if (element[1] < collection[i][1]) {
collection.splice(i, 0, element);
added = true;
break;
}
}
if (!added) {
collection.push(element);
}
}
}
this.dequeue = function() {
return collection.shift();
}
this.front = function() {
return collection[0];
}
this.isEmpty = function() {
return collection.length === 0;
}
this.size = function() {
return collection.length;
}
}
var pQ = new PriorityQueue();
pQ.enqueue(['gannicus', 3]);
pQ.enqueue(['spartacus', 1]);
pQ.enqueue(['crixus', 2]);
pQ.enqueue(['oenomaus', 4]);
pQ.print();