-
队列(Queue),也是一种受限的线性结构,先进先出(FIFO)
-
受限之处在于它只允许在表的前端进行删除,在表的后端进行插入操作
-
队列结构有两种常见的方式:
- 基于数组实现
- 基于链表实现
-
队列方法
- enqueue(element):向队列尾部添加一个(或多个)新的项
- dequeue():移除队列的第一(即排在队列最前面的)项,并返回被移除的元素
- front():返回队列中第一个元素-一最先被添加,也将是最先被移除的元素。队列不做任何变动(不移除元素只返回元素信息一与Stack类的peek方法非常类似)
- isEmpty0):如果队列中不包含任何元素,返回true,否则返回false.
- size():返回队列包含的元素个数,与数组的length属性类似。
- toString():将队列中的内容,转成字符串形式
-
基于数组的队列结构
//封装队列类 function Queue(){ //队列属性 this.items = []; //队列方法 //1.向队尾添加元素 Queue.prototype.enqueue = function (element){ this.items.push(element); } //2.向队首移除元素 Queue.prototype.dequeue = function (){ this.items.shift(element); } //3.查看队首的元素,队列不变 Queue.prototype.front = function (){ return this.items[0] } //4.查看队列是否为空 Queue.prototype.isEmpty = function (){ return this.items.length === 0; } //5.查看元素的个数 Queue.prototype.size = function (){ return this.items.length } //6.toString()方法 Queue.prototype.toString = function (){ var resultString = ''; this.items.forEach(v=>{ resultString += v + " "; }) return resultString; } }
-
数组实现的优先级队列
-
优先级队列在插入一个元素时会考虑数据的优先级,比较完成后得出元素的正确位置
-
封装优先级队列
-
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{
this.items.forEach((v,i)=>{
if(queueElement.priority < v){
this.items.splice(i,0,queueElement);
}else{
this.items.push(queueElement);
}
})
}
}
//其他方法与普通队列一致
}