美文网首页
学习js数据结构与算法2—队列

学习js数据结构与算法2—队列

作者: 陈左夕 | 来源:发表于2018-03-22 17:16 被阅读0次

    队列遵循先进先出原则——如同排队

    4.1 创建队列

        function Queue() {
            // 使用数据结构为数组来存储队列中的元素
            var items = [];
            /*
                队列可用方法
                enqueue(ele): 向队尾添加一个新的项
                dequeue(): 移除队列的第一项,并返回被移除的元素
                front(): 返回队列中的第一项
                isEmpty(): 如果队列不含任何元素返回true,否则false
                size(): 返回队列包含的元素个数
            */
            this.enqueue = function (ele) {
                items.push(ele);
            };
        
            this.dequeue = function () {
                return items.shift();
            };
        
            this.front = function () {
                return items[0];
            };
        
            this.isEmpty = function () {
                return items.length === 0;
            };
        
            this.size = function () {
                return items.length;
            };
        
            this.print = function () {
                console.log(items.toString());
            }
        }
        
        使用Queue类
        var queue = new Queue();
        console.log(queue.isEmpty());   // true
        
        queue.enqueue('John');
        queue.enqueue('Jack');
        queue.enqueue('Camel');
        
        queue.print();      // ['John', 'Jack', 'Camel']
        console.log(queue.size());      // 3
        console.log(queue.isEmpty());   // false
        
        queue.dequeue();
        queue.dequeue();
        queue.print();      // ['Camel']
    

    4.2 优先队列

        function PriorityQueue() {
            var items = [];
    
            this.isEmpty = function () {
                return items.length === 0;
            };
    
            function QueueElement(element, priority) {
                this.element = element;
                this.priority = priority;
            }
    
            this.enqueue = function (element, priority) {
                var queue = new QueueElement(element, priority);
    
                if (this.isEmpty()) {
                    items.push(queue);
                } else {
                    var added = false;
                    for (var i = 0; i < items.length; i++) {
                        if (queue.priority < items[i].priority) {
                            items.splice(i, 0, queue);  // 优先级小的会被插入到队列前面
                            added = true;
                            break;
                        }
                    }
                    if (!added) {
                        items.push(queue);
                    }
                }
            }; 
    
            this.print = function() {
                console.log(items);  
            };
        }
    
        var queue = new PriorityQueue();
        queue.enqueue('John', 2);
        queue.enqueue('Backham', 1);
        queue.enqueue('Jack', 1);
        queue.print();
    

    4.3 循环队列——击鼓传花

        function hotPotato(list, num) {
            var queue = new Queue();
            
            for (var i = 0; i < list.length; i++) {
                queue.enqueue(list[i]);
            }
            
            var player = '';
            while (queue.size() > 1) {
                for (var i = 0; i < num; i++) {
                    queue.enqueue(queue.dequeue());
                }
                player = queue.dequeue();
                console.log(player + '在击鼓传花游戏中被淘汰!')
            }
            
            return player;
        }
        
        var names = ['周杰伦', '陈奕迅', '王力宏', '蔡依林', 'TFBoys', '容祖儿', '韩红', '郑爽'];
        var winner = hotPotato(names, 4);
        console.log('胜利者是' + winner);
    

    相关文章

      网友评论

          本文标题:学习js数据结构与算法2—队列

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