JavaScript数据结构与算法之队列

50 阅读1分钟
// 队列
// 队列 遵循 先进先出,即只能在前端进行删除,在后端进行新增
function Queue() {
  this.items = [];
  // 新增
  Queue.prototype.enqueue = (element) => {
    this.items.push(element);
  };
  // 删除 从第一位删除
  Queue.prototype.dequeue = () => {
    return this.items.shift();
  };
  // 返回第一个元素
  Queue.prototype.front = () => {
    return this.items[0];
  };
  // 判断是否为空
  Queue.prototype.isEmpty = () => {
    return this.items.length == 0;
  };
  // 获取长度
  Queue.prototype.size = () => {
    return this.items.length;
  };
  // 返回队列中的内容,转为字符串格式
  Queue.prototype.toString = () => {
    let resultString = "";
    for (let i = 0; i < this.items.length; i++) {
      resultString += this.items[i] + " ";
    }
    return resultString;
  };
}

// 击鼓传花
const passGame = (nameList, num) => {
  const queue = new Queue();
  for (let i = 0; i < nameList.length; i++) {
    queue.enqueue(nameList[i]);
  }
  while (queue.size() > 1) {
    for (let i = 0; i < num - 1; i++) {
      queue.enqueue(queue.dequeue());
    }
    queue.dequeue();
  }
  const endName = queue.front();
  return nameList.findIndex((item) => item == endName);
};

const data = passGame(["afd", "23", "adgad", 09344], 2);
console.log("data", data);