《JavaScript数据结构与算法》笔记——第4章 队列

news/2024/7/6 1:43:07
  • 队列遵循FIFO(First In First Out)原则的一组有序的项
let Queue = (function () {
    let item = new WeakMap();
    class InnerQueue {
        constructor() {
            item.set(this, [])
        }
        /**
         * 向队列尾部添加一个项
         * @param element
         */
        enqueue(element) {
            item.get(this).push(element)
        }
        /**
         * 移除队列的第一项
         */
        dequeue() {
            return item.get(this).shift()
        }
        /**
         * 返回队列中第一项,对队列本身不做修改
         * @returns {*}
         */
        front() {
            return item.get(this)[0]
        }
        /**
         * 判断队列是否为空
         * @returns {boolean}
         */
        isEmpty() {
            return item.get(this).length === 0
        }
        /**
         * 返回队列包含的元素个数
         * @returns {*}
         */
        size() {
            return item.get(this).length
        }
    }
    return InnerQueue
})();
  • 优先队列
let PriorityQueue = (function () {
    let item = new WeakMap();
    class InnerQueue {
        constructor() {
            item.set(this, [])
        }
        /**
         * 根据优先级添加项(最小优先队列)
         * @param element
         * @param priority
         */
        enqueue(element, priority = (item.get(this).length === 0 ? 1 : item.get(this)[item.get(this).length - 1].priority + 1)) {
            const queue = item.get(this);
            if (queue.length === 0) {
                item.get(this).push({element, priority});
                return;
            }
            for (let i = 0; i < queue.length; i++) {
                if (priority < queue[i].priority) {
                    item.get(this).splice(i, 0, {element, priority});
                    break;
                } else if (i === queue.length - 1) {
                    item.get(this).push({element, priority});
                    break;
                }
            }
        }
        /**
         * 移除队列的第一项
         */
        dequeue() {
            return item.get(this).shift()
        }
        /**
         * 返回队列中第一项,对队列本身不做修改
         * @returns {*}
         */
        front() {
            return item.get(this)[0]
        }
        /**
         * 判断队列是否为空
         * @returns {boolean}
         */
        isEmpty() {
            return item.get(this).length === 0
        }
        /**
         * 返回队列包含的元素个数
         * @returns {*}
         */
        size() {
            return item.get(this).length
        }
        print() {
            return JSON.stringify(item.get(this))
        }
    }
    return InnerQueue
})();

http://www.niftyadmin.cn/n/2772054.html

相关文章

为什么安卓系统不是用c语言,为什么安卓手机不全都用Type-C接口

手机从出现到现在发展了几十年&#xff0c;手机上的充电接口也从之前的单一充电的功能&#xff0c;变成了手机传输数据&#xff0c;充电&#xff0c;甚至耳机也改成插在了在充电接口。现在的手机接口主要有iPhone的lightning接口&#xff0c;安卓手机的Micro-USB以及Type-C接口…

ODM、JDM、OEM概念

OEM (Original Equipment Manufacturer) - 原始设备制造商 委托生产&#xff0c;或者说“代工生产”&#xff0c;其含义是品牌厂商不直接制造产品&#xff0c;而是负责设计和开发新产品&#xff0c;控制销售“渠道”&#xff0c;具体的加工任务交给别的企业去做。OEM的原始概念…

多屏互动技术研究(一)之技术概述

多屏互动技术研究之技术概述 多屏互动技术研究之技术概述1 技术背景2 多屏互动研究与应用现状2.1 DLNA2.2 Miracast2.3 AirPlay2.4 GoogleCast2.5 其他多屏互动技术 3 总结 1 技术背景 随着通讯技术、信息技术以及电视技术的快速发展及普及。数字电视这种新兴的媒体传输方式迅…

Tomcat简单分析-Container

1.Container的有四个子容器&#xff0c;分别是Engine&#xff0c;Host&#xff0c;Context&#xff0c;Wrapper,如下&#xff1a;2.Container一个也有四个子接口Engine,Host,Context,Wrapper和一个默认实现类ContainerBase,另外这四个子容器都是对应一个StandardXXX实现类&…

android fatal signal 分析,android 内存异常报错,/libc: Fatal signal 11 (SIGSEGV) at 0x00

/libc: Fatal signal 11 (SIGSEGV) at 0x00000a61 (code1), thread 18141 (FinalizerDaemon)07-19 05:43:14.611 161-161/? I/DEBUG: *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***07-19 05:43:14.611 161-161/? I/DEBUG: Build fingerprint: “generic/…

计算机实现乘法和除法的运算规则

计算机底层的逻辑运算处理&#xff0c;我们这边不进行解释&#xff0c;只从二进制的位运算方面来解释实现乘法和除法的运算规则。 计算机在计算乘法、除法、以及求余运算时都是利用二进制的加法来实现的&#xff0c;也就是计算机中最繁忙的累加器&#xff08;包括减法运算也是将…

android webview 深度链接,如何在Android应用程序的WebView中启用深度链接?

匿名用户这就是android web view的问题&#xff0c;因为它将所有内容都当作URL处理&#xff0c;但是其他浏览器&#xff0c;比如手机上的chrome&#xff0c;会截获该方案&#xff0c;而OS将做剩下的工作来打开相应的应用程序。 要实现这一点&#xff0c;您需要修改web视图shoul…

多屏互动技术研究(二)之WifiDisplay(Miracast)技术原理及实现

WifiDisplay(Miracast)技术原理及实现 文章目录WifiDisplay(Miracast)技术原理及实现1. WifiDisplay简介2. WifiDisplay协议流程3. WifiDisplay显示框架实现4. Android WifiDisplay实现4.1 Source端实现4.1.1 设备扫描及发现4.2 Sink端的实现4.2.1 设备如何被发现4.2.2 设备p2p…