3

队列

队列是遵循FIFO(First In First Out, 先进先出)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾。

创建队列

首先需要一个用于存储队列中元素的数据结果。

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

队列的方法
enqueue(element) -- 向队列尾部添加一个或多个的项。
dequeue() -- 移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
front() -- 返回队列中第一个元素,也就是最先被移除的元素。队列不坐任何编订。
isEmpty()--队列是否包含元素。
size() -- 返回队列包含的元素个数。

完整的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 Algorithms

推荐一个找vue,angular组件的轮子工厂


AshleyLv
839 声望38 粉丝

他拿着一件斗篷 扮演着一条龙