1.对队列的操作
2.一个用数组实现的队列
3.使用队列:方块舞的舞伴分配问题
1.对队列的操作
- 队列是一种列表,不同的是只能在队尾插入元素,队首删除元素。(先进先出)
- 入队 enqueue【即数组push()】
- 出队 dequeue【即数组shift()】
- 读取对头元素 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())
console.log(q.back())
console.log(q.empty())
q.dequeue()
console.log(q.toString())
3.使用队列:方块舞的舞伴分配问题
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
- 定义一个Dancer存储性别和名字,根据性别存入男女队列。
- 实例化两个队列,男女队列。
- 两个队列出队。