-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathqueue封装.js
100 lines (90 loc) · 2.37 KB
/
queue封装.js
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
* @Descripttion:
* @version:
* @Author: wenlan
* @Date: 2022-03-22 17:39:17
* @LastEditors: wenlan
* @LastEditTime: 2022-03-22 21:21:13
*/
//FIFO
//队列两种方式实现
//array 缺点:性能不高 链表性能不高
// 链表
class Queue {
constructor() {
this.items = [];
}
//进入队列
enqueue(item) {
this.items.push(item);
}
//从队列前端删除
dequeue() {
return this.items.shift();
}
//查看顶端元素
front() {
return this.items[0];
}
// isEmpty() 查看队列是否为空
isEmpty() {
return this.items.length === 0;
}
// size() 查看队列中元素的个数
size() {
return this.items.length;
}
// toString() 将队列中的元素以字符串形式返回
toString() {
let result = "";
for (let item of this.items) {
result += item + " ";
}
return result;
}
}
// const queue = new Queue();
// // enqueue() 测试
// queue.enqueue("a");
// queue.enqueue("b");
// queue.enqueue("c");
// queue.enqueue("d");
// console.log(queue.items); //--> ["a", "b", "c", "d"]
// // dequeue() 测试
// queue.dequeue();
// queue.dequeue();
// console.log(queue.items); //--> ["c", "d"]
// // front() 测试
// console.log(queue.front()); //--> c
// // isEmpty() 测试
// console.log(queue.isEmpty()); //--> false
// // size() 测试
// console.log(queue.size()); //--> 2
// // toString() 测试
// console.log(queue.toString()); //--> c d
//击鼓传花
function passGame(nameList, num) {
//create queue
const queue1 = new Queue();
for (const item of nameList) {
queue1.enqueue(item);
}
// console.log("原队列", queue1.items);
// 队列中只剩下最后一个元素就停止
while (queue1.size() > 1) {
for (let i = 0; i < num - 1; i++) {
//讲num-1 的人从队列前端取出放到队列后端
queue1.enqueue(queue1.dequeue());
}
//取出每轮num对应的那个人
const demo = queue1.dequeue();
console.log(demo);
}
const endName = queue1.front();
//获取剩下的那个人
// 5、返回这个人在原数组中对应的索引
return endName;
}
const names = ["lily", "lucy", "tom", "tony", "jack"];
const targetIndex = passGame(names, 4);
console.log("击鼓传花", targetIndex); //--> lily