JavaScript 数据结构(队列)

243 阅读1分钟

队列是一种先进先出(FIFO)的数据结构。队列只能在队首删除元素,从队尾插入元素,这点和栈不太一样。

  • 就像我们在开发过程中,为了让任务可以并行处理,通常会开启多个线程;

  • 但是我们不能让多个线程同时运行处理任务去占用过多的资源;

  • 这个时候,如果有需要开启线程处理任务的情况,我们就会使用线程队列;

  • 线程队列会依照次序来启动线程,并且处理对应的任务。

队列具有以下常见的常规操作:

  • enterQueue(element) : 添加一个元素到队列尾部,入队;

  •  deleteQueue(): 移除队列首部元素,同时返回被移除的元素,出队;

  • front(): 返回队列首部元素,这个方法不会移除队列首部元素,仅仅会返回它;

  • isEmpty(): 是否为空

  •  size(): 返回队列的长度;

  •  toString(): 将队列结构的内容以字符的形式返回。

用 JavaScript 具体实现如下代码:

class Queue {
  constructor() {
    this.items = [];
  }

  enterQueue(element) {
    this.items.push(element);
  }

  deleteQueue() {
    if (this.isEmpty()) {
      throw new Error('队列为空');
    }
    return this.items.shift();
  }

  front() {
    return this.items[0];
  }

  isEmpty() {
    return this.items.length === 0;
  }

  size() {
    return this.items.length;
  }

  toString() {
    let str = '';
    for (let index = 0; index < this.items.length; index++) {
      str += `${this.items[index]} `;
    }
    return str;
  }
}

const queue = new Queue();
queue.enterQueue(1);
queue.enterQueue(2);
queue.enterQueue(3);
queue.toString();
alert(queue.size());
queue.deleteQueue();
alert(queue);
alert(queue.size());
alert(queue.isEmpty());
alert(queue.front());