队列_队列结构封装
程序员文章站
2022-07-13 12:53:02
...
队列(Queue)结构满足先进先出Fifo
first in first out。
队列使用的方法有:
- enqueue()
- dequeue()
- front()
- size()
- toString()
与之前的栈结构的方法相似,唯一不同就是第二个方法,栈是删除最后一个元素,而队列是删除第一个元素:
function Queue() {
// 属性
this.item = [];
// 方法
// 1. enqueue
Queue.prototype.enqueue = function(element) {
this.item.push(element);
return this.item.length;
}
// 2. dequeue
Queue.prototype.dequeue = function() {
return this.item.shift();
}
// 3. front
Queue.prototype.front = function() {
return this.item[0];
}
// 4. isEmpty
Queue.prototype.isEmpty = function() {
return this.item.length == 0;
}
// 5. size
Queue.prototype.size = function() {
return this.item.length;
}
// 6. toString
Queue.prototype.toString = function() {
let resultString = '';
for (let i = 0; i < this.item.length; i ++) {
resultString += this.item[i] + ' ';
}
resultString = resultString.trim();
return resultString;
}
}
同样,只要new Queue
来创建Queue
的一个实例就可以使用这些方法。
接下来使用队列来解决击鼓传花的问题:
接下来封装击鼓传花函数:
// 击鼓传花
function jgch(nameList, number) {
// 创建一个队列结构
let queue = new Queue();
// 将 nameList 的元素加入到队列中
for (let i = 0; i < nameList.length; i ++) {
queue.enqueue(nameList[i]);
}
// 当队列中多于一个元素的时候进行游戏
while (queue.size() > 1) {
// 每一轮游戏都淘汰一个人,并将 num 之前的人添加到队列的末尾
for (let i = 0; i < number - 1; i ++) {
// 前num - 1个人数都不会被淘汰。
queue.enqueue(queue.dequeue());
}
// 删除当前第一个元素
queue.dequeue();
}
alert(queue.size());
let endName = queue.front();
alert('获胜的人是:'+ endName);
alert('编号为:' + nameList.indexOf(endName));
}