JS队列

作者: Delevent | 来源:发表于2020-04-30 15:43 被阅读0次

    概念: 先进先出(FIFO)的数据接口

    1. 代码实现队列Queue

    function Queue() {
        var items = [];
    
        this.enqueue = function(element){
            items.push(element);
        };
    
        this.dequeue = function(){
            return items.shift();
        };
    
        this.front = function(){
            return items[0];
        };
    
        this.isEmpty = function(){
            return items.length == 0;
        };
    
        this.clear = function(){
            items = [];
        };
    
        this.size = function(){
            return items.length;
        };
    
        this.print = function(){
            console.log(items.toString());
        };
    }
    

    2. 优先队列

    function PriorityQueue() {
        var items = [];
    
        function QueueElement (element, priority){
            this.element = element;
            this.priority = priority;
        }
    
        this.enqueue = 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);
                }
            }
        };
    
       //其他方法和默认的Queue实现相同
    }
    

    3. 循环队列--击鼓传花

    function hotPotato (nameList, num){
        var queue = new Queue();
        for (var i=0; i<nameList.length; i++){
            queue.enqueue(nameList[i]);
        }
    
        var eliminated = '';
        while (queue.size() > 1){
            for (var i=0; i<num; i++){
                queue.enqueue(queue.dequeue());
            }
            eliminated = queue.dequeue();
            console.log(eliminated + '在击鼓传花游戏中被淘汰。');
        }
        return queue.dequeue();
    }
    

    摘录自 《学习JavaScript数据结构与算法》

    相关文章

      网友评论

          本文标题:JS队列

          本文链接:https://www.haomeiwen.com/subject/jfazwhtx.html