如何使用陣列在 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 實現其他方法。
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP