资讯专栏INFORMATION COLUMN

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

callmewhy / 1050人阅读

摘要:队列遵循原则的一组有序的项向队列尾部添加一个项移除队列的第一项返回队列中第一项,对队列本身不做修改判断队列是否为空返回队列包含的元素个数优先队列根据优先级添加项最小优先队列移除队列的第一项返回队列中第一项,对队列本身不做修改判断队列是否

队列遵循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
})();

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/108867.html

相关文章

  • 重读《学习JavaScript数据结构算法-三版》- 5 队列

    摘要:定场诗马瘦毛长蹄子肥,儿子偷爹不算贼,瞎大爷娶个瞎大奶奶,老两口过了多半辈,谁也没看见谁前言本章为重读学习数据结构与算法第三版的系列文章,主要讲述队列数据结构双端队列数据结构以及队列相关应用。 定场诗 马瘦毛长蹄子肥,儿子偷爹不算贼,瞎大爷娶个瞎大奶奶,老两口过了多半辈,谁也没看见谁! 前言 本章为重读《学习JavaScript数据结构与算法-第三版》的系列文章,主要讲述队列数据结构、...

    charles_paul 评论0 收藏0
  • Java学习路线总结,搬砖工逆袭Java架构师(全网最强)

    摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...

    Scorpion 评论0 收藏0
  • JavaScript数据结构算法笔记——1 JavaScript简介

    摘要:异或左移右移删除属性不同类型之间比较在比较对象时,比较的是引用和是内部方法对不同的类型返回结果如下表对不同类型返回结果如下类申明函数有两种方法在原型上申明函数,只会创建一次,在所有实例中共享,可以节约内存和降低实例化的开销在类定义中申明函数 ^ 异或 > 右移 delete 删除属性 不同类型之间==比较 showImg(https://segmentfault.c...

    Cheng_Gang 评论0 收藏0
  • JavaScript数据结构算法笔记——2 数组

    数组操作方法 方法 描述 备注 push() 将元素添加到数组末尾 修改原数组 unShift() 将元素插入到数组首位(将每项向后移动一位,在第一位插入元素) 修改原数组 pop() 删除数组最后一个元素 修改原数组 shift() 删除数组第一个元素(将每项向前移动一位并删除最后一项) ...

    Martin91 评论0 收藏0
  • JavaScript数据结构算法笔记——7 字典和散列表

    摘要:在字典中,存储的是键,值,集合可以看作值,值的形式存储元素,字典也称为映射方法描述备注向字典中添加新元素通过某个键值从字典中移除对应的数据值判断某个键值是存在于这个字典中通过键值获取对应的数据值返回字典所有元素的数量删除字典中所有元素将字典 在字典中,存储的是[键,值],集合可以看作[值,值]的形式存储元素,字典也称为映射 方法 描述 备注 set(key,...

    zorro 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<