SOURCE

class Queue {
  constructor() {
    // 存储数据
    this.items = [];
  }
  enqueue(item) {
    // 入队
    this.items.push(item);
  }

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

  head() {
    // 获取队首的元素
    return this.items[0];
  }

  tail() {
    // 获取队尾的元素
    return this.items[this.items.length - 1];
  }

  clear() {
    // 清空队列
    this.items = [];
  }

  size() {
    // 获取队列的长度
    return this.items.length;
  }

  isEmpty() {
    // 判断队列是否为空
    return this.items.length === 0;
  }

}

// 约瑟夫环问题
// 有一个数组存放了 100 个数据 0-99,要求每隔两个数删除一个数,到末尾时再循环至开头继续进行,求最后一个被删除的数字。

// 创建队列,将 0 到 99 的数字入队;
// 循环队列,依次出列队列中的数字,对当前出队的数字进行计数 index + 1;
// 判断当前出列的 index % 3 是否等于 0,如果不等于 0 则入队;
// 直到队列的长度为 1,退出循环,返回队列中的数字。
function ring(arr) {
    const queue = new Queue();
    arr.forEach(v => queue.enqueue(v));
    let index = 0;
    while(queue.size() > 1) {
        // 依次把第一个元素出队,若该元素不是第三个((index+1)%3!=0),则依次放到队末,
        // 如此循环直至队列只剩下1个元素
        const item = queue.dequeue();
        if (++index % 3 !== 0) {
            queue.enqueue(item);
        }
    }
    return queue.head();
}

console.log(ring([1,2,3,4,5,6,7]))
console.log(ring([1,2,6]))


//斐波那契数列
// 斐波那契数列(Fibonacci sequence),又称黄金分割数列,
// 因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,
// 故又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……
// 在数学上,斐波那契数列以如下被以递推的方法定义:
// F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)。

function fiboSequence(num) {
    if (num < 2) return num;
    const queue = [];
    queue.push(0);
    queue.push(1);
    for(let i = 2; i < num; i++) {
        const len = queue.length;
        queue.push(queue[len - 2] + queue[len  - 1]);
    }
    return queue;
}

console.log(fiboSequence(12))
console 命令行工具 X clear

                    
>
console