用js實現個優先隊列吧

隊列是一種很經常使用的數據結構,它是一組遵循先進先出(FIFO)規則的項。在現實生活中,最多見的隊列的例子就是排隊。隊列有一些方法,入隊、出隊、隊列的長度,清空隊列等。用js實現一個普通的隊列代碼以下:數據結構

 function Queue() {
            var queue = [];
            // 隊列元素個數
            this.size = function () {
                return queue.length;
            };
            // 入隊
            this.enqueue = function (item) {
                queue.push(item);
            };
            // 出隊
            this.dequeue = function () {
               return queue.shift();
            };
            // 隊列是否爲空
            this.isEmpty = function () {
                return !queue.length;
            };
            // 隊列第一個元素
            this.front = function () {
                return queue[0];
            };
            // 清空隊列
            this.clear = function () {
                queue = [];
            }
        }

若是是優先隊列,其實就是 給每一個須要排隊的元素加個優先級,優先級高的在前面,優先級低的就只好在後面了。隊列的其餘方法不變,只是入隊的方法變了,須要根據元素的優先級排隊,實現代碼以下:this

        function PriorityQueue() {
            var queue = [];
            this.enqueue = function (item) {
                if (this.isEmpty()) {
                    queue.push(item);
                } else {
                    var flag = false; //判斷是否排隊
                    for (let i = queue.length - 1; i > 0; i--) {
                        if (queue[i].priority <= item.priority) {
                            queue.splice(i, 0, item);
                            flag = true;
                            break;
                        }
                    }
                    // 循環後未入隊,優先級最大,插入到第一位
                    if (!flag) {
                        queue.unshift(item);
                    }
                }
            };
相關文章
相關標籤/搜索