数据结构—队列(Queue)

队列

三五七言

不要让数据结构成为天花板

相关代码

特点

先进先出的原则

队列是一个线性结构,特点是在某一端添加数据,在另一端删除数据

 

用途:

模拟流程或其他带有抽象排队属性的事物或逻辑,例如时间循环队列,发布订阅模式的回调队列等等。

 

基本方法

  • enqueue()在队尾插入一个元素
  • dequeue()从队头删除一个元素
  • getHeader()获取队头的元素
  • getTail()获取队尾的元素
  • getLength()获取队列的长度
  • isEmpty()判断队列是否为空队列
/**
 * 队列基本方法

enqueue()在队尾插入一个元素
dequeue()从队头删除一个元素
getHeader()获取队头的元素
getTail()获取队尾的元素
getLength()获取队列的长度
isEmpty()判断队列是否为空队列
 */
class Queue {
  constructor() {
    this.queue = []
  }
  // 入队
  enqueue(item) {
    this.queue.push(item)
  }

  //出队
  dequeue() {
    return this.queue.shift()
  }

  //获取队头
  getHeader() {
    return this.queue[0]
  }

  //获取队尾数据
  getTail() {
    return this.queue[this.queue.length - 1]
  }
  getLength() {
    return this.queue.length
  }
  //判断空
  isEmpty() {
    return this.queue.length === 0
  }
}

module.exports = Queue
 

 

双向队列

 

循环队列

使用frontrear两个指针分别代表队列的头和尾,实际对外表现的队列是frontrear所指向的元素构成的。为了复用存储空间,循环队列在存储结构的实现上是首位相连的。

  • 基本要素
    • front指针指向队头
    • rear指针指向队尾
    • size队列的长度
    • length存储空间的大小
  • 基本方法
    • enqueue()元素入队
    • dequeue()元素出队
    • isEmpty()判断队空
    • isFull()判断队满
    • getSize()获取队列长度
    • getLength()获取存储空间长度
    • clear()清空队列

 

相关代码

posted @ 2020-11-23 11:31  有什么奇怪  阅读(355)  评论(0编辑  收藏  举报