用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 = [];
            }
        }

如果是優先隊列,其實就是 給每個需要排隊的元素加個優先級,優先級高的在前面,優先級低的就只好在后面了。隊列的其他方法不變,只是入隊的方法變了,需要根據元素的優先級排隊,實現代碼如下:

 1 function PriorityQueue() {
 2             var queue = [];
 3            // 隊列是否為空
 4             this.isEmpty = function () {
 5                 return !queue.length;
 6             };
 7             this.value = function (){
 8                 return queue;
 9             };
10             this.enqueue = function (item) {
11                 if (this.isEmpty()) {
12                     queue.push(item);
13                 } else {
14                     var flag = false; //判斷是否排隊
15                     for (let i = 0; i < queue.length; i++) {
16                         if (queue[i].priority <= item.priority) {
17                             queue.splice(i, 0, item);
18                             flag = true;
19                             break;
20                         }
21                     }
22                     // 循環后未入隊,優先級最大,插入到第一位
23                     if (!flag) {
24                         queue.push(item);
25                     }
26                 }
27             };
28 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM