队列queue 先进先出

队列queue 先进先出
队列只能在尾部添加元素(入队),在头部删除元素(出队)
类比:排队

 

 

队列实现

class Queue {
  constructor() {
    this.items = []
  }
  // 入队 从对尾添加元素
  enqueue(item) {
    this.items.push(item)
  }
  // 出队 从队列头部删除第一个元素
  dequeqe() {
    return this.items.shift()
  }
  // 返回队列头部的元素
  head() {
    return this.items[0]
  }
  // 返回队列尾部的元素
  tail() {
    return this.items[this.items.length - 1]
  }
  size() {
    return this.items.length
  }
  isEmpty() {
    return this.items.length === 0
  }
  //  清空队列
  clear() {
    this.items.length = 0
  }

}
View Code

 

队列题目

// 有一个数组存放0-99数字,要求每隔2个数字删除一个数(每3个删除一个),到末尾时循环至开头继续进行,求最后一个被删除的数字
// 0  1 2 3 4 5 6 7 8 9 10 每隔2个数字删除一个数字,也就是把2 5 8 删除了

function delRing() {
  const queue = new Queue()
  for (let i = 0; i < 100; i++) {
    queue.enqueue(i) //0-99数字入队操作
  }
  let index = 0
  while (queue.size() !== 1) {
    let item = queue.dequeue() //首先逐一出队
    index++ //记录每次删除头部元素(这个动作) index+1
    if (index % 3 !== 0) {
      queue.enqueue(item) //把不要删除的数字入队
    }

  }
  return queue.head()

}
View Code

 

//斐波那契数列  F(1)=0,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)

//斐波那契数列  F(1)=0,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)

function fibonacci(n) {
  const queue = new Queue()
  queue.enqueue(0)
  queue.enqueue(1)
  let index = 0
  // 重复执行删一个 加一个的动作
  while (index < n - 2) {
    let del_head = queue.dequeue() //头部删除
    let head = queue.head()
    let next_item = del_head + head
    queue.enqueue(next_item) //尾部添加
    index++
  }
  return queue.tail()
}
View Code

 

 

posted on 2020-10-15 16:49  章画  阅读(233)  评论(0编辑  收藏  举报

导航