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

  • 行列遵照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://segmentfault.com/a/1190000018030105
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞