# 1. 前言
队列,是一种遵从先进先出(FIFO,First-In-First-Out)原则的有序集合。队列在尾部添加新元素,并从顶部移除元素,最新添加的元素必须排在队列的末尾。
# 2. 功能说明
- enqueue(value):进队,添加一个新元素到队列末尾
- dequeue():出队,移除队列中的第一个元素,同时返回该元素
- front():获取队列中的第一个元素
- isEmpty():判断队列是否为空。是返回 true,否返回 fallse
- clear():清空队列里的元素
- size():获取队列里元素的个数
# 3. 代码实现
首先,先创建一个类表示队列,并且初始化一个空数组,用来保存队列里的元素
class Queue {
constructor() {
this.items = [];
}
}
1
2
3
4
5
2
3
4
5
接着,在这个队列类中实现所需要的功能:
class Queue {
constructor() {
this.items = [];
}
//进队,从队的尾部进入
enqueue(value) {
this.items.push(value);
}
//出队,从队的头部出
dequeue() {
return this.items.shift();
}
//获取队中的第一个元素
front() {
return this.items[0];
}
//判断队是否为空
isEmpty() {
return this.items.length === 0;
}
//获取队中元素的个数
size() {
return this.items.length;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 4. 测试
在这里,我们可以利用队列模拟‘击鼓传花’的游戏:
/*
*名称:击鼓传花
*参数:nameArr,为一个数组,包含了参与该游戏的所有人员名字;
* num,击鼓的次数
*返回:最终游戏胜利者的名字
*/
function JGCH(nameArr, num) {
var queue = new Queue(); //实例化一个队列
for (var i = 0; i < nameArr.length; i++) {
queue.enqueue(nameArr[i]); //将传入的数组中的人员名字加入到队列中
}
var taotai = "";
while (queue.size() > 1) {
for (var i = 0; i < num; i++) {
//每击一次鼓,将队列开头的一项移至队尾
queue.enqueue(queue.dequeue());
}
//击鼓停止,拿着花的那个人即被淘汰,移出队列
taotai = queue.dequeue();
console.log(taotai + "被淘汰!!!");
}
//最后队列里剩下的那个人即为最终胜利者
return queue.dequeue();
}
var nameArr = ["郭靖", "张无忌", "乔峰", "虚竹", "段誉"];
console.log("最终胜利者是:" + JGCH(nameArr, 10));
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26