前端面試總結--數據結構與算法三

隊列

隊列是遵循FIFO(First In First Out, 先進先出)原則的一組有序的項。隊列在尾部添加新元素,並從頂部移除元素。最新添加的元素必須排在隊列的末尾。vue

建立隊列

首先須要一個用於存儲隊列中元素的數據結果。this

function Queue(){
    var items = [];
}

隊列的方法
enqueue(element) -- 向隊列尾部添加一個或多個的項。
dequeue() -- 移除隊列的第一(即排在隊列最前面的)項,並返回被移除的元素。
front() -- 返回隊列中第一個元素,也就是最早被移除的元素。隊列不坐任何編訂。
isEmpty()--隊列是否包含元素。
size() -- 返回隊列包含的元素個數。code

完整的Queue代碼

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

相關文章
相關標籤/搜索