队列 Queue 受限的线性表 特点FIFO 先进先出
队列只允许在表的后端进行插入操作,在表的前端进行删除操作(左边为前端,右边为后端)
栈和队列添加删除的区别:
栈添加和删除都是只能操作顶端数据,即最上方数据
队列插入数据则是在队列的后端(最右边)插入数据
队列删除数据则是在队列的前端(最左边)删除前端数据
function Queue(element) {
this.item = []
// 添加参数
Queue.prototype.enqueue = function (element) {
this.item.push(element)
}
// 删除第一个元素
Queue.prototype.dequeue = function () {
// return this.item.pop() pop是删除队列尾部的元素
return this.item.shift()
}
// 显示第一个元素
Queue.prototype.front = function () {
return this.item[0]
}
// 判断队列是否有参数
Queue.prototype.isEmpty = function () {
return this.item.length == 0
}
// 队列的长度
Queue.prototype.size = function () {
return this.item.length
}
// 将队列内的数据用字符串显示出来
Queue.prototype.toString = function () {
var result = ''
for(var i = 0; i < this.item.length; i++){
result += this.item[i] + ' '
}
return result
}
}
var queue = new Queue()
queue.enqueue('100')
queue.enqueue('222')
queue.enqueue('103330')
queue.enqueue('333')
queue.enqueue('555')
queue.enqueue('777')
alert(queue.dequeue())
alert(queue.front())
alert(queue.isEmpty())
alert(queue.size())
alert(queue.toString())
队列的击鼓传花面试题
function passGame(nameList, num) {
// 创建一个队列结构
var queue = new Queue
// 将所有人依次放入队列中
for(var i = 0; i < nameList.length; i++ ){
queue.enqueue(nameList[i])
}
// 开始数数字
while (queue.size() > 1) {
// 不是num的时候,重新加入队列的末尾
// 是num这个数字的时候,删除掉从队列中
// num数字之前的人重新放入到末尾
for(var i = 0; i < num - 1 ; i++ ){
queue.enqueue(queue.dequeue())
}
// num对应的这个直接从队列中删除
queue.dequeue()
}
// 获取剩下的那个人
alert(queue.size())
var lastOne = queue.front()
// console.log(queue.front());
alert('最后的王者:' + lastOne)
return nameList.indexOf(lastOne)
}
name = ['buluohe1', 'buluohe13', 'buluohe144', 'buluohe155', 'buluohe1222']
alert(passGame(name, 3))
优先级队列 每一个元素不再是一个数据,而且包含数据的优先级 在添加方式中,根据优先级放入正确的位置