js数据结构 - 队列

队列

队列的概念

队列是是一种受限的线性表,特点为先进先出FIFO:first in first out)。

  • 受限之处在于它只允许在表的前端(front)进行删除操作;
  • 在表的后端(rear)进行插入操作;

队列的应用:

  • 打印队列:计算机打印多个文件的时候,需要排队打印;
  • 线程队列:当开启多线程时,当新开启的线程所需的资源不足时就先放入线程队列,等待CPU处理;

队列类的实现:

队列的实现和栈一样,有两种方案:

  • 基于数组实现;
  • 基于链表实现;

队列的常见操作:

  • enqueue(element):向队列尾部添加一个(或多个)新的项;
  • dequeue():移除队列的第一(即排在队列最前面的)项,并返回被移除的元素;
  • front():返回队列中的第一个元素——最先被添加,也将是最先被移除的元素。队列不做任何变动(不移除元素,只返回元素信息与Stack类的peek方法非常类似);
  • isEmpty():如果队列中不包含任何元素,返回true,否则返回false;
  • size():返回队列包含的元素个数,与数组的length属性类似;
  • toString():将队列中的内容,转成字符串形式;

队列操作的实现

export default class Queue {

  constructor() {
    this.items = [];
  }

  // enqueue(item) 入队,将元素加入到队列中
  enqueue(item) {
    this.items.push(item);
  }

  // dequeue() 出队,从队列中删除队头元素,返回删除的那个元素
  dequeue() {
    return this.items.shift();
  }

  // front() 查看队列的队头元素
  front() {
    return this.items[0];
  }

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

  // size() 查看队列中元素的个数
  size() {
    return this.items.length;
  }

  // toString() 将队列中的元素以字符串形式返回
  toString() {
    let result = '';
    for (let item of this.items) {
      result += item + ' ';
    }
    return result;
  }
}

案例

使用队列实现小游戏:击鼓传花,传入一组数据和设定的数字num,循环遍历数组内元素,遍历到的元素为指定数字num时将该元素删除,直至数组剩下一个元素。

// 利用队列结构的特点实现击鼓传花游戏求解方法的封装
export default function passGame(nameList, number) {
  let queue = new Queue()
   // 将数组中的数据,放在队列中
  for(const item in nameList){
    queue.enqueue(item)
  }
  let i =1
  while(queue.size() > 1){
    // 对1到number-1 的人执行出队再进队
    for(let i =0;i<number-1;i++){
      queue.enqueue(queue.dequeue())
    }
    // number这个人执行出队,不在进队
    queue.dequeue();
  }
  // 将队列中剩下的人的值,根据数组找到原位置
  return nameList.indexof(queue.dequeue)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值