队列封装 (先进先出) 击鼓传花案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>封装队列</title>
</head>
<body>
<script>
// 封装队列类
function Queue(){
// 属性
this.items = []
// 方法
// 1 将元素添加到队列中
Queue.prototype.enqueue = function(element){
this.items.push(element)
}
// 2 从队列中删除前端元素
Queue.prototype.dequeue = function(){
return this.items.shift()
}
// 3 查看前端的元素
Queue.prototype.front = function(){
return this.items[0]
}
// 4 查看队列是否为空
Queue.prototype.isEmpty = function(){
return this.items.length == 0
}
// 5 查看队列中元素的个数
Queue.prototype.size = function(){
return this.items.length
}
// 6 toString方法
Queue.prototype.toString = function(){
var resultString = ''
for(var i = 0; i < this.items.length; i++){
resultString += this.items[i] + ' '
}
return resultString
}
}
// 使用队列
// var queue = new Queue()
// 将元素加入到队列中
// queue.enqueue('abc')
// queue.enqueue('cba')
// queue.enqueue('nba')
// queue.enqueue('wba')
// console.log(queue)
// queue.dequeue()
// console.log(queue)
// console.log(queue.front())
// console.log(queue.isEmpty())
// console.log(queue.size())
// console.log(queue.toString())
// 面试题:击鼓传花
function passGame(nameList,num){
// 1 创建一个队列结构
var queue = new Queue()
// 2 将所有人 依次加入到 队列中
for(var i = 0; i< nameList.length; i++){
queue.enqueue(nameList[i])
}
// 3 开始数数字
while(queue.size() > 1){
// 不是num的时候,重新加入到列队的末尾
// 是 num 的时候 将其从队列中删除
// 3.1 数字之前的人 重新放入到 队列的末尾
for(var i = 0; i< num - 1; i++){
queue.enqueue(queue.dequeue())
}
queue.dequeue()
}
// 4 获取剩下的那个人
console.log(queue.size())
var endName = queue.front()
console.log(endName)
console.log(nameList.indexOf(endName))
return nameList.indexOf(endName)
}
var nameList = ['abc','nba','cba','wba','rba']
const last = passGame(nameList,3)
console.log(last)
</script>
</body>
</html>
我是Eric,手机号是13522679763

浙公网安备 33010602011771号