如何使用陣列在 TypeScript 中建立佇列?


在本教程中,我們將學習如何使用 TypeScript 中的陣列從頭開始建立佇列。

佇列是一種資料結構,允許使用者從末尾新增元素並從開頭刪除元素。這意味著它基於 FIFO 概念工作,即先進先出。

此外,我們不能像陣列一樣隨機地從佇列中刪除元素。我們只能從第一個索引刪除元素,並將它們新增到最後一個空索引中。

在這裡,我們將使用一些面向物件程式語言的概念來使用陣列建立佇列。

佇列的方法

使用者可以在下面瞭解我們將在 Queue 類中實現的方法。

  • enQueue() − enQueue() 方法將元素新增到佇列中。

  • deQueue() − 它從佇列中刪除元素。

  • Size () − 它返回佇列的長度,表示佇列中元素的總數。

  • isFull() − 如果佇列已滿,則返回 true;否則返回 false。

  • isEmpty() − 如果佇列不包含任何元素,則返回 true;否則返回 false。

  • printeQueue() − 它列印佇列的所有元素。

使用類和陣列實現佇列

使用者可以按照以下步驟使用類和陣列建立佇列並實現上述方法。

步驟 1 − 首先,我們需要為佇列類建立一個介面,為佇列類準備一個結構。

interface queueInterface<Type> {
   enQueue(dataItem: Type): void;
   deQueue(): Type | undefined;
   isEmpty(): boolean;
   isFull(): boolean;
   size(): number;
   printQueue(): void;
   // other methods, if users wanted to add new methods for the Queue
}

我們在上面的語法中使用了 interface 關鍵字來建立介面。該介面包含 enQueue、deQueue、isEmpty()、isFUll() 等方法的結構。

步驟 2 − 現在,建立一個名為 QueueClass 的類,實現 queueInterface。

class QueueClass<Type> implements queueInterface<Type> {
   // implement queue methods and variables
}

步驟 3 − 我們需要為在 queueInterface 中宣告的佇列實現所有方法。

步驟 4 − 實現 isEmpty() 方法和 isFull() 方法以檢查佇列是否為空或已滿。

isEmpty(): boolean {
   return this.QueueData.length <= 0;
    
}
isFull(): boolean {
   return this.QueueData.length >= this.maxSize;
}

在上面的程式碼中,我們使用了陣列的 length 屬性來檢查佇列是否已滿或為空。

步驟 5 − 實現 enQueue() 方法。

enQueue(dataItem: Type): void {
   if (this.isFull()) {
      // queue is full
   } else {
      // Queue has some space
      this.QueueData.push(dataItem);
   }
}

在上面的程式碼中,我們首先使用 isFull() 方法檢查佇列是否有空間。之後,我們使用陣列的 push() 方法將元素推入佇列。

步驟 6 − 實現 deQueue() 方法。

deQueue(): Type | undefined {
   if (this.isEmpty()) {
      // Queue contains zero elements
      return;
   } else {
      // Queue has more than zero elements
      return this.QueueData.shift();
   }
}

在上面的程式碼中,我們檢查佇列是否為空,並使用陣列的 shift() 方法從第一個索引刪除元素。

步驟 7 − 實現 size() 和 printQueue() 方法。

size(): number {
   return this.QueueData.length;
}
printQueue(): void {
   for (let i = 0; i < this.QueueData.length; i++) {
      console.log(this.QueueData[i]);
   }
}
}

我們使用了陣列的 length 屬性來獲取佇列的大小。在 printQueue() 方法中,我們使用 for 迴圈列印所有佇列資料。

示例

下面的示例包含 QueueClass 的實現。我們在 QueueClass 中實現了所有上述方法。

QueueClass 包含初始化佇列類最大大小的建構函式。我們建立了 QueueClass 的物件,並使用了 QueueClass 的不同方法對佇列執行各種操作。

interface queueInterface<Type> {
   enQueue(dataItem: Type): void;
   deQueue(): Type | undefined;
   isEmpty(): boolean;
   isFull(): boolean;
   size(): number;
   printQueue(): void;
}

class QueueClass<Type> implements queueInterface<Type> {
   private QueueData: Array<Type> = [];
   private maxSize: number = 0;

   constructor(length: number) {
      this.maxSize = length;
   }
   isEmpty(): boolean {
      let result = this.QueueData.length <= 0;
      return result;
   }
   isFull(): boolean {
      let result = this.QueueData.length >= this.maxSize;
      return result;
   }
   enQueue(dataItem: Type): void {
      if (this.isFull()) {
         console.log("The queue is full!");
      } else {
         this.QueueData.push(dataItem);
      }
   }

   deQueue(): Type | undefined {
      if (this.isEmpty()) {
         console.log("The Queue is empty! There is no element to pop-out");
         return;
      } else {
         var element = this.QueueData.shift();
         return element;
      }
   }

   size(): number {
      let len = this.QueueData.length;
      return len;
   }
   printQueue(): void {
      for (let i = 0; i < this.QueueData.length; i++) {
         console.log(this.QueueData[i]);
      }
   }
}

const testQueue = new QueueClass<string>(3);
testQueue.enQueue("JavaScript");
testQueue.enQueue("typeScript");
testQueue.enQueue("TutorialsPoint");

console.log("Is Queue full? " + testQueue.isFull());
console.log("The last remove element from the queue is " + testQueue.deQueue());
console.log("The size of the Queue is " + testQueue.size());
console.log("Is Queue empty? " + testQueue.isEmpty());
testQueue.printQueue();

編譯後,它將生成以下 JavaScript 程式碼:

var QueueClass = /** @class */ (function () {
   function QueueClass(length) {
      this.QueueData = [];
      this.maxSize = 0;
      this.maxSize = length;
   }
   QueueClass.prototype.isEmpty = function () {
      var result = this.QueueData.length <= 0;
      return result;
   };
   QueueClass.prototype.isFull = function () {
      var result = this.QueueData.length >= this.maxSize;
      return result;
   };
   QueueClass.prototype.enQueue = function (dataItem) {
      if (this.isFull()) {
         console.log("The queue is full!");
      }
      else {
         this.QueueData.push(dataItem);
      }
   };
   QueueClass.prototype.deQueue = function () {
      if (this.isEmpty()) {
         console.log("The Queue is empty! There is no element to pop-out");
         return;
      }
      else {
         var element = this.QueueData.shift();
         return element;
      }
   };
   QueueClass.prototype.size = function () {
      var len = this.QueueData.length;
      return len;
   };
   QueueClass.prototype.printQueue = function () {
      for (var i = 0; i < this.QueueData.length; i++) {
         console.log(this.QueueData[i]);
      }
   };
   return QueueClass;
}());
var testQueue = new QueueClass(3);
testQueue.enQueue("JavaScript");
testQueue.enQueue("typeScript");
testQueue.enQueue("TutorialsPoint");
console.log("Is Queue full? " + testQueue.isFull());
console.log("The last remove element from the queue is " + testQueue.deQueue());
console.log("The size of the Queue is " + testQueue.size());
console.log("Is Queue empty? " + testQueue.isEmpty());
testQueue.printQueue();

輸出

以上程式碼將產生以下輸出:

Is Queue full? true
The last remove element from the queue is JavaScript
The size of the Queue is 2
Is Queue empty? falsetypeScript
TutorialsPoint

在以上輸出中,使用者可以觀察到 deQueue() 方法刪除了我們首先新增到佇列中的元素。

我們學習瞭如何在 TypeScript 中從頭開始建立佇列。使用者可以使用佇列的不同方法,還可以根據需要為 QueueClass 實現其他方法。

更新於: 2023年1月20日

2K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.