JavaScript 队列
在本节中,我们将介绍队列并学习如何在JavaScript中实现队列。
什么是队列
队列是一种数据结构,数据以队列的形式组织。我们可以将队列类比为一个排队投票的男人队列,排在队列最前面的男人先投票然后离开队列。在数据队列的情况下,与之类似,排在第一个位置的元素会先被移除,依次类推。因此,队列遵循“先进先出”的原则,也就是先进入队列的元素会先被移除。因此,队列数据结构是一个有序的数据值列表,值从队列的末尾插入,从队列的前端移除。
实现一个队列
让我们通过一个示例来理解如何实现一个队列:
class Queue1 {
constructor (){
this.data = [];
this.rear = 0;
this.size = 10;
}
}
在上面的代码中,我们使用了以下三个变量,每个变量都指定了它们的使用方式:
- data: 这是一个数组,我们将队列的值或元素存储在其中。
- rear: 这是一个变量,用于存储下一个元素将插入队列的位置值。
- size: 这是为队列定义的大小,它表示队列中包含的元素数。
因此,类似于堆栈操作,队列也有两个主要的操作,可以插入一个元素到队列中或从队列中删除一个现有元素。这些操作是:
- 入队(Enqueue): 入队操作用于在队列中插入一个元素。它从队列的后端插入一个元素。
- 出队(Dequeue): 出队操作用于从队列中删除或移除现有元素。出队操作用于从队列的前端删除一个现有元素。
关于队列的这些主要方法,还有一些其他可用的方法可以应用于队列,它们是:
- Peek(): Peek()方法用于获取队列前端的值。
- isEmpty(): 该操作用于检查队列是否有元素或者是否为空。
- printQueue(): printQueue()函数用于以字符串形式返回队列中的所有元素。
我们将讨论队列的这些操作的实际实现。
实现队列操作
现在,我们将看到这些队列操作的实际实现,如下所示:
1)enqueue(): 用于向队列中添加元素的队列操作。
示例:
enqueue(ele) {
if(this.rear < this.size ) {
this.data[this.rear] = ele;
this.rear = this.rear + 1;
}
}}
在上面的代码中,我们使用push函数向队列中添加了元素。
2)出队列(dequeue): 用于从队列中移除或弹出现有值的队列操作。
示例:
dequeue() {
if(this.isEmpty() === false) {
this.rear = this.rear-1;
return this.data.shift();
}
}
在上面的代码中,首先我们检查了队列是否已经为空。这是因为如果队列没有值,它将返回”Underflow”。否则,它将检查并返回元素。
3) Length (): 队列操作用于返回队列的长度。
示例:
length() {
return this.rear;
}
这个语句 this.rear 用于获取队列的长度。
4) isEmpty (): 该队列操作用于检查队列是否为空。如果队列为空,返回 true。否则,返回 false。
示例:
isEmpty() {
return this.rear === 0;
}
在上面的代码中,它将检查尾部的值,即末尾,是否等于0。如果为真,则返回true,否则返回false。
5) print(): 队列操作用于打印队列的元素,从索引值0到队列的尾部位置。
示例:
print() {
for(let i =0; i < this.rear; i++) {
console.log(this.data[i]);
}
}
在上述代码中,使用for循环,并从0索引开始到队列的后面位置,它将打印值并将其放入数据数组中。
6) clear(): 队列操作用于清除或删除队列的所有元素,并使rear的值等于0。
示例:
clear() {
this.data.length = 0;
this.rear = 0;
}
在上面的代码中,使用clear()操作,将data数组中的值变为0,并将rear值设为0。
实现JavaScript队列
完整代码:
class Queue {
constructor(){
this.data = [];
this.rear = 0;
this.size = 20;
}
enqueue(ele) {
if(this.rear < this.size ) {
this.data[this.rear] = ele;
this.rear = this.rear + 1;
}
}
length() {
return this.rear;
}
isEmpty() {
return this.rear === 0;
}
getFront() {
if(this.isEmpty() === false) {
return this.data[0];
}
}
getLast() {
if(this.isEmpty() === false) {
return this.data[ this.rear - 1 ] ;
}
}
dequeue() {
if(this.isEmpty() === false) {
this.rear = this.rear-1;
return this.data.shift();
}
}
print() {
for(let i =0; i < this.rear; i++) {
console.log(this.data[i]);
}
}
clear() {
this.data.length = 0;
this.rear = 0;
}
}
尽管队列在每种编程语言中的功能都是相同的,但使用和语法会根据编程语言的不同而有所变化。