Javascript 中的優先順序佇列


在本文中,我們將討論 Javascript 中的優先順序佇列資料結構。

優先順序佇列是抽象資料型別 (ADT),類似於常規佇列或堆疊資料結構,但此外每個元素都有一個與其關聯的“優先順序”。在優先順序佇列中,具有高優先順序的元素優先於具有低優先順序的元素得到處理。如果兩個元素具有相同的優先順序,則按其在佇列中的順序進行處理。

示例 1

以下示例演示了 Javascript 中的優先順序佇列類資料結構。

在此,我們將根據元素的優先順序將它們插入到佇列中。在建立了非空佇列後,我們可以刪除優先順序最高的元素(使用 shift() 方法返回第一個元素)。

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>PriorityQueue Data Structure</title>
   </head>
   <body>
      <script type="text/javascript">
         class QueueElement {
            constructor(elem, priNo) {
            this.element = elem;
            this.priority = priNo;
            }
         }
         class PriorityQueue {
            constructor() {
               this.queArr = [];
            }
            enqueue(elem, priNo) {
               let queueElem = new QueueElement(elem, priNo);
               let contain = false;
               for (let i = 0; i < this.queArr.length; i++) {
                  if (this.queArr[i].priority > queueElem.priority) {
                     this.queArr.splice(i, 0, queueElem);
                     contain = true;
                     break;
                  }
               }
               if (!contain) {
                  this.queArr.push(queueElem);
               }
            }
            dequeue() {
               document.write(
                  "</br>The dequeued element in the priority queue is : "
               );
               if (this.isEmpty()) return "Underflow";
               return this.queArr.shift();
            }
            front() {
               if (this.isEmpty()) return "No elements in Queue";
               return this.queArr[0];
            }
            rear() {
               document.write("</br>The rear element of the priority queue is : ");
               if (this.isEmpty()) return "The Queue is Empty..!";
               return this.queArr[this.queArr.length - 1];
            }
            isEmpty() {
               return this.queArr.length == 0;
            }
            display() {
               document.write("The Elements in the priority queue are : </br>");
               let res_Str = "";
               for (let i = 0; i < this.queArr.length; i++)
               res_Str += this.queArr[i].element + " ";
               return res_Str;
            }
         }
         var priorityQueue = new PriorityQueue();
         priorityQueue.enqueue("Alice", 2);
         priorityQueue.enqueue("Cullen", 4);
         priorityQueue.enqueue("Edward", 1);
         priorityQueue.enqueue("Bella", 2);
         priorityQueue.enqueue("Jacob", 3);
         document.write(priorityQueue.display());
      </script>
   </body>
</html>

示例 2

以下示例演示了 Javascript 中優先順序佇列類資料結構的實現。

<!DOCTYPE html>
<html lang="en">
   <head>
      <meta charset="UTF-8" />
      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      <meta name="viewport" content="width=device-width, initial-scale=1.0" />
      <title>PriorityQueue Data Structure</title>
   </head>
   <body>
      <script type="text/javascript">
         class QueueElement {
            constructor(elem, priNo) {
            this.element = elem;
            this.priority = priNo;
            }
         }
         class PriorityQueue {
            constructor() {
               this.queArr = [];
            }
            enqueue(elem, priNo) {
               let queueElem = new QueueElement(elem, priNo);
               let contain = false;
               for (let i = 0; i < this.queArr.length; i++) {
                  if (this.queArr[i].priority > queueElem.priority) {
                     this.queArr.splice(i, 0, queueElem);
                     contain = true;
                     break;
                  }
               }
               if (!contain) {
                  this.queArr.push(queueElem);
               }
            }
            dequeue() {
               document.write(
                  "</br>The dequeued element in the priority queue is : "
               );
               if (this.isEmpty()) return "Underflow";
               return this.queArr.shift();
            }
            front() {
               document.write("</br>The front element of the priority queue is : ");
               if (this.isEmpty()) return "The Queue is Empty..!";
               return this.queArr[0];
            }
            rear() {
               document.write("</br>The rear element of the priority queue is : ");
               if (this.isEmpty()) return "The Queue is Empty..!";
               return this.queArr[this.queArr.length - 1];
            }
            isEmpty() {
               return this.queArr.length == 0;
            }
            display() {
               document.write("The Elements in the priority queue are : </br>");
               let res_Str = "";
               for (let i = 0; i < this.queArr.length; i++)
               res_Str += this.queArr[i].element + " ";
               return res_Str;
            }
         }
         var priorityQueue = new PriorityQueue();
         priorityQueue.enqueue("Alice", 2);
         priorityQueue.enqueue("Cullen", 4);
         priorityQueue.enqueue("Edward", 1);
         priorityQueue.enqueue("Bella", 2);
         priorityQueue.enqueue("Jacob", 3);
         document.write(priorityQueue.display());
         document.write(priorityQueue.front().element);
         document.write(priorityQueue.rear().element);
      </script>
   </body>
</html>

更新時間:2022 年 12 月 16 日

3K+ 瀏覽量

開啟你的 職業生涯

完成課程以獲得認證

開始
廣告