js realizes the queue structure

Queues 先进先出are similar to queuing in life. Those who enter the queue first will get the service first, and then leave the queue first, and those who come later will be queued at the end of the queue.
Schematic diagram of queue entry and exit
There are two ways to implement queues with js: arrays and objects. The implementation code is as follows:
1. Implement queues through arrays

  <script>
        // 封装队列类
        function Queue() {
    
    
            // 属性
            this.items = [];
            // 方法
            // 1.将元素加入到队列中
            Queue.prototype.enqueue = function (element) {
    
    
                this.items.push(element);
            }
            // 2.从队列中删除前端元素
            Queue.prototype.dequeue = function () {
    
    
                return this.items.shift();
            }
            // 3.查看前端的元素
            Queue.prototype.front = function () {
    
    
                return this.items[0];
            }
            // 4.查看队列是否为空
            Queue.prototype.isEmpty = function () {
    
    
                return this.items.length == 0;
            }
            // 5.查看队列中元素个数
            Queue.prototype.size = function () {
    
    
                return this.items.length;
            }
            // 6.toString方法
            Queue.prototype.toString = function () {
    
    
                var str = ''
                for (var i = 0; i < this.items.length; i++) {
    
    
                    str = str + this.items[i] + ' ';
                }
                return str;
            }
        }
        // 使用队列
        /*var queue = new Queue();
        queue.enqueue('abc');
        queue.enqueue('def');
        queue.enqueue('ghl');
        console.log(queue.items);
        queue.dequeue();
        console.log(queue.items);
        console.log(queue.front());
        console.log(queue.isEmpty());
        console.log(queue.size());
        console.log(queue.toString());*/

        // 面试题:击鼓传花
        function gamePass(nameList, num) {
    
    
            // 1.定义一个队列结构
            var queue = new Queue();
            // 2.将所有人加入到队列中
            for (var i = 0; i < nameList.length; i++) {
    
    
                queue.enqueue(nameList[i]);
            }
            // 3.开始数数字
            while (queue.size() > 1) {
    
    
                // 不是num的时候,重新加入到队列尾部
                // 是num这个数字的时候,将其从队列中删除
                // 3.1.num数字之前的人重新放人队列尾部
                for (var i = 0; i < num - 1; i++) {
    
    
                    var detele = queue.dequeue();
                    var enter = queue.enqueue(detele);
                }
                // 3.2.num对应这个人,直接从队列中删除
                queue.dequeue();
            }
            // 4.获取队列中的那个人
            alert(queue.size());
            var endName = queue.front();
            alert('最终剩下的人:' + endName);
            return name.indexOf(endName);
        }
        console.log(gamePass(['mary', 'lili', 'chenjie', 'wangbo', 'sunshine'], 3))
    </script>

2. Implementing queues through objects

 // 封装一个队列
        class Queue {
    
    
            constructor() {
    
    
                this.count = 0;
                this.items = {
    
    };
                this.lowestCount = 0; // 追踪第一个元素
            }
            enqueue(item) {
    
    
                this.items[this.count] = item;
                this.count++;
            };
            dequeue() {
    
    
                if (this.isEmpty()) return false;
                var result = this.items[this.lowestCount];
                delete this.items[this.lowestCount];
                this.lowestCount++;
                return result;
            };
            peek() {
    
    
                if (this.isEmpty()) return false;
                return this.items[this.lowestCount];
            };
            isEmpty() {
    
    
                return this.count - this.lowestCount == 0
            };
            size() {
    
    
                return this.count - this.lowestCount;
            };
            clear() {
    
    
                this.count = 0;
                this.items = {
    
    };
                this.lowestCount = 0; // 追踪第一个元素
            }
            toString() {
    
    
                let str = '';
                for (var i = this.lowestCount; i < this.count; i++) {
    
    
                    str += this.items[i] + ' ';
                }
                return str;
            }
        }
        // 测试代码
        // const queue = new Queue();
        // queue.enqueue('John')
        // queue.enqueue('Jack')
        // alert(queue.toString());
        // queue.enqueue('Camila'); 
        // alert(queue.toString());
        // alert(queue.size());
        // queue.dequeue()
        // queue.dequeue()
        // alert(queue.toString())
          // 击鼓传花
        function hotPotato(elementList, num) {
    
    
            var queue = new Queue();
            for (var i = 0; i < elementList.length; i++) {
    
    
                queue.enqueue(elementList[i]);
            }
            while (elementList.length != 1) {
    
    
                for (var i = 0; i < num; i++) {
    
    
                    queue.enqueue(queue.dequeue());
                }
                queue.dequeue();
                elementList.length--;
            }
            return queue.peek();
        }
        var List = ['John', 'Jack', 'Camila', 'Ingrid', 'Carl'];
        alert(hotPotato(List, 7));

Guess you like

Origin blog.csdn.net/weixin_52797317/article/details/127836403