隊列是遵循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