JS实现队列结构

245 阅读1分钟

JS实现队列结构

一、前言

队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,是一种先进先出(FIFO)的数据结构,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。

想要使用js实现队列结构的话,需要保证实现的队列具备以下基础功能:

  • enqueue 新增元素

  • dequeue 删除队列头部的元素并返回其值

  • front 返回队列头部的元素

  • clear 清空队列

  • size 队列的大小,也就是元素个数

  • isEmpty 队列是否为空

    清楚了要实现的功能之后,就可以开始队列的实现了

二、队列的实现

const Queue = (function () {
  const _items = new WeakMap()
  return class {
    constructor() {
      _items.set(this, [])
    }
    // 新增元素
    enqueue(el) {
      _items.get(this).push(el)
    }
    // 删除队列头部的元素并返回其值
    dequeue() {
      return _items.get(this).shift()
    }
    // 返回队列头部的元素
    front() {
      return _items.get(this)[0]
    }
    // 清空队列
    clear() {
      _items.set(this, [])
    }
    // 队列的大小
    size() {
      return _items.get(this).length
    }
    // 队列是否为空
    isEmpty() {
      return _items.get(this).length === 0
    }
  }
})()
const queue = new Queue()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
console.log(queue.size())  // 3
console.log(queue.isEmpty()) // false
queue.clear()
console.log(queue.size()) // 0
console.log(queue.isEmpty()) // true