队列( TypeScript)
- 只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表
- 先进先出(First In First Out)
利用数组实现
class ArrayQueue<T> {
private queue: T[] = []
enqueue(element: T): void {
this.queue.push(element)
}
dequeue(): T | undefined {
return this.queue.shift()
}
peek(): T | undefined {
return this.queue[0]
}
isEmpty(): boolean {
return this.queue.length === 0
}
size(): number {
return this.queue.length
}
}
击鼓传花案例
function hotPotato(names: string[], num: number) {
const queue = new ArrayQueue<string>()
for (const name of names) {
queue.enqueue(name)
}
while(queue.size() > 1) {
for (let i = 1; i < num; i++) {
const name = queue.dequeue()!
queue.enqueue(name)
}
queue.dequeue()
}
return queue.dequeue()
}