JavaScript 队列

JavaScript 队列

在本节中,我们将介绍队列并学习如何在JavaScript中实现队列。

什么是队列

队列是一种数据结构,数据以队列的形式组织。我们可以将队列类比为一个排队投票的男人队列,排在队列最前面的男人先投票然后离开队列。在数据队列的情况下,与之类似,排在第一个位置的元素会先被移除,依次类推。因此,队列遵循“先进先出”的原则,也就是先进入队列的元素会先被移除。因此,队列数据结构是一个有序的数据值列表,值从队列的末尾插入,从队列的前端移除。

实现一个队列

让我们通过一个示例来理解如何实现一个队列:

class Queue1 {
    constructor (){
         this.data = [];
        this.rear = 0;
        this.size = 10;
   }
}

在上面的代码中,我们使用了以下三个变量,每个变量都指定了它们的使用方式:

  1. data: 这是一个数组,我们将队列的值或元素存储在其中。
  2. rear: 这是一个变量,用于存储下一个元素将插入队列的位置值。
  3. 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;
   }
}

尽管队列在每种编程语言中的功能都是相同的,但使用和语法会根据编程语言的不同而有所变化。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程