• 队列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
  • 相关阅读:
    HDU 2121 Ice_cream’s world II 不定根最小树形图
    POJ 3164 Command Network 最小树形图
    POJ 3723 Conscription 最小生成树
    UVA 1175 Ladies' Choice 稳定婚姻问题
    BZOJ 2753 [SCOI2012] 滑雪和时间胶囊 最小生成树
    BZOJ 1854: [Scoi2010]游戏 无向图判环
    HDU 3974 Assign the task 暴力/线段树
    Codeforces Round #302 (Div. 2) D. Destroying Roads 最短路
    uoj 67 新年的毒瘤 割点
    蓝桥
  • 原文地址:https://www.cnblogs.com/xiaoliziaaa/p/13821489.html
Copyright © 2020-2023  润新知