04 队列

1.对队列的操作

2.一个用数组实现的队列

3.使用队列:方块舞的舞伴分配问题

1.对队列的操作

  1. 队列是一种列表,不同的是只能在队尾插入元素,队首删除元素。(先进先出)
  2. 入队 enqueue【即数组push()】
  3. 出队 dequeue【即数组shift()】
  4. 读取对头元素 peek()

2.一个用数组实现的队列

function Queue () {
  this.dataStore = []
  this.enqueue = enqueue
  this.dequeue = dequeue
  this.front = front
  this.back = back
  this.toString = toString
  this.empty = empty

  // 入队
  function enqueue (element) {
    this.dataStore.push(element)
  }
  // 出队
  function dequeue () {
    return this.dataStore.shift()
  }
  // 读取队首元素
  function front () {
    return this.dataStore[0]
  }
  // 读取队尾元素
  function back () {
    return this.dataStore[this.dataStore.length-1]
  }
  // 显示队列内所有元素
  function toString () {
    let retStr = ''
    for (let i=0; i<this.dataStore.length; i++) {
      retStr += this.dataStore[i] + "\n"
    }
    return retStr
  }
  // 判断队列是否为空
  function empty () {
    if (this.dataStore.length === 0) {
      return true
    } else {
      return false
    }
  }
}

let q = new Queue()
q.enqueue('wayliu')
q.enqueue('liuguowei')
console.log(q.toString())
//
wayliu
liuguowei
console.log(q.front())  //  wayliu
console.log(q.back())   //  liuguowei
console.log(q.empty())  //  false
q.dequeue()
console.log(q.toString()) // liuguowei


3.使用队列:方块舞的舞伴分配问题

// Dancer 对象
function Dancer (name, sex) {
  this.name = name
  this.sex = sex
}

// 男性舞者队列
let maleDancers = new Queue()
// 女性舞者队列
let femalDancers = new Queue()

// 站队 
function getDancers (males,females) {
  var names = namesList.split(',')
  for (let i=0; i<names.length; i++) {
    names[i] = names[i].trim()
  }
  for (let j = 0; j< names.length; j++) {
    let dancer = names[j].split(" ")
    let sex = dancer[0]
    let name = dancer[1]
    if (sex === 'F') {
      females.enqueue(new Dancer(name,sex))
    } else {
      males.enqueue(new Dancer(name,sex))
    }
  }
  console.log(females.dataStore)
  console.log(males.dataStore)
}
getDancers(maleDancers,femalDancers)
[ Dancer { name: 'AllisonMcMillan', sex: 'F' },
  Dancer { name: 'CherylFerenback', sex: 'F' },
  Dancer { name: 'JenniferIngram', sex: 'F' },
  Dancer { name: 'AuroraAdney', sex: 'F' } ]

[ Dancer { name: 'FrankOpitz', sex: 'M' },
  Dancer { name: 'MasonMcMillan', sex: 'M' },
  Dancer { name: 'ClaytonRuff', sex: 'M' },
  Dancer { name: 'RaymondWilliams', sex: 'M' },
  Dancer { name: 'BRYANfRAZER', sex: 'M' },
  Dancer { name: 'DavidDurr', sex: 'M' },
  Dancer { name: 'DannyMartin', sex: 'M' } ]
// 分配舞者
function dance (males,females) {
  while (!females.empty() && !males.empty()) {
    person1 = females.dequeue()
    person2 = males.dequeue()
    console.log()
    console.log('Female dancer is:',person1.name)
    console.log('Male dancer is:',person2.name)
  }
}
dance(maleDancers,femalDancers)
Female dancer is: AllisonMcMillan
Male dancer is: FrankOpitz

Female dancer is: CherylFerenback
Male dancer is: MasonMcMillan

Female dancer is: JenniferIngram
Male dancer is: ClaytonRuff

Female dancer is: AuroraAdney
Male dancer is: RaymondWilliams
  1. 定义一个Dancer存储性别和名字,根据性别存入男女队列。
  2. 实例化两个队列,男女队列。
  3. 两个队列出队。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值