队列是遵循FIFO(First In First Out, 先进先出)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。vue
首先须要一个用于存储队列中元素的数据结果。this
function Queue(){ var items = []; }
队列的方法
enqueue(element) -- 向队列尾部添加一个或多个的项。
dequeue() -- 移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
front() -- 返回队列中第一个元素,也就是最早被移除的元素。队列不坐任何编订。
isEmpty()--队列是否包含元素。
size() -- 返回队列包含的元素个数。code
function Queue(){ var items = (); this.enqueue = function(element){ items.push(element); } this.dequque = function(){ items.shift(); } this.font = function(){ return items[0]; } this.isEmpty = function(){ return items.length==0; } this.size = function(){ return item.length; } }
优先队列就是元素的添加和移除是基于一个优先级的。在现实中的例子就是不少时候机场登机的顺序,是头等舱的乘客和商务舱的乘客优先级高于经济舱的乘客。能够先登机。
实现一个优先队列,有两种选项:设置优先级,而后再正确的位置添加元素;或者用入列操做添加元素,而后按照优先级移除它们。咱们将会在正确的位置添加元素。队列
function PriorityQueue(){ var items = (); function QueueElement(element, priority){ this.element = element; this.proiority = priority; } this.enqueue = function(element, priority){ var queueElement = new QueueElement(element, priority); if(this.isEmpty()){ item.push(queueElement); } else { var added = false; for(var i=0;i<items.length;i++){ if(queueElement.priority < items[i].priority){ item.splice(i,0,queueElement); added = true; break; } } if(!added){ items.push(queueElement); } } } //其它方法和上面的Queue相同 } var priorityQueue = new PriorityQueue(); priorityQueue.enqueue("Ana",2); priorityQueue.enqueue("Tom",1); priorityQueue.enqueue("Jane",1);
参考书籍:Learning Javascript Data Structures and Algorithmsip
推荐一个找vue,angular组件的轮子工厂element