TypeScript 如何使用数组创建一个队列
在本教程中,我们将学习在TypeScript中使用数组从头开始创建一个队列。
队列是一种数据结构,允许用户从末尾添加元素,并从开始删除它们。这意味着它的工作原理是基于先进先出的概念,即先进先出。
另外,我们不能像数组那样从队列中随机地删除元素。我们只能从第一个索引中移除元素,并将其添加到最后的空索引中。
在这里,我们将使用面向对象编程语言的一些概念,使用数组创建一个队列。
排队的方法
用户可以了解到我们将在下面的队列类中实现的方法。
- enQueue() – enQueue()方法在队列中添加一个元素。
-
deQueue() – 它将元素从队列中移除。
-
Size () – 它返回队列的长度,代表队列中元素的总数。
-
isFull() – 如果队列已满,它返回true;否则返回false。
-
isEmpty() – 如果队列不包含任何元素,它返回真;否则,它返回假。
-
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;
}
在上面的代码中,我们使用数组的长度属性来检查队列是满还是空。
第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]);
}
}
}
我们使用了数组的长度属性来获得队列的大小。在printQueue()方法中,我们使用for-loop来打印所有队列数据。
示例
下面的例子包含了QueueClass的实现。我们已经在QueueClass中实现了上述所有方法。
QueueClass包含初始化队列类最大尺寸的构造函数。我们已经创建了QueueClass的对象,并使用QueueClass的不同方法对Queue进行各种操作。
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();
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中从头开始创建Queue。用户可以使用Queue的不同方法,也可以根据需求为QueueClass实现其他方法。