队列和栈相反,队列是一种先进先出(FIFO)的线性表。队列在尾部添加新元素,在顶部移除元素;应用于生活之中最常见的就是排队
1.队列的创建
由于队列是先进先出,可以根据js中数组提供的push()方法和shift()方法来实现
function Queue(){
//创建一个队列的构造函数
var items=[];
this.enqueue=function(element){
items.push(element);//向尾部添加新元素
};
this.dequeue=function(){
return items.shift();//移除队列第一项,并返回被移除的元素
};
this.isEmpty=function(){
return items.length==0;//判断队列是否为空
};
this.clear=function(){
items=[];//清空队列
};
this.size=function(){
return items.length;//返回队列的长度
};
this.front=function(){
return items[0];//返回队列的第一个元素
};
this.print=function(){
console.log(items.toString());
};
};
队列的应用
1.优先队列
优先队列是指元素的添加或移除是基于优先级的:如买票,挂号等等
function MinPriorityQueue(){
var items=[];
function QueueElement(element,priority){
this.element=element;//创建了一个特殊的元素,这个元素中包含了要添加到队列的元素,以及他在队列中的优先级
this.priority=priority;
};
this.enqueue1=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);
}
}
};
}