什么是对列
是一种“先进先出”的数据结构。(如排队候车,肯定是先排队的人先上车)

实际用处
如打印机
队列操作

使用数组实现队列结构

使用类封装队列操作
const Queue = function () {
const items = []; //私有的,只能在函数内部十使用,外部访问不到
// this.items = [];//共有的,外部可以访问
// 入队
this.enQueue = function (element) {
items.push(element)
}
// 出队
this.deQueue = function(){
// 这里使用 return 是为了返回删除的元素
return items.shift()
}
// 查看列头
this.front = function(){
return items[0]
}
// isEmpty 队列是否为空(一般is开头命名的返回Boolean类型)
this.isEmpty = function(){
return items.length == 0
}
// size 检查队列元素个数
this.size = function(){
return items.length
}
// 检查items
this.getItems = function(){
return items
}
}
使用队列实现击鼓传花例子
问题:假设有a,b,c,d,e,f等玩家在玩游戏,当花每传到第三个人的时候,就淘汰当前的这个人,到最后剩的最后一个玩家为赢家
解释:
游戏开始是从a开始的
红色是第一轮 淘汰的是c f ,留下的是a b d e ,当前小花在a玩家手里,a是当前传到的第一个人

绿色是第二轮 淘汰的是d ,留下的是a b e ,当前小花在a玩家手里,a是当前传到的第一个人

橙色是第三轮 淘汰的是b ,留下的是a e ,当前小花在a玩家手里 a是当前传到的第二个人

灰色是第四轮 淘汰的是e ,留下的是a

所以最后的赢家是a
按照队列的思路:把玩家每次是3的放在队列的第一个,并且踢它出局,第一个第二个就放在队列的最后。

依次论推。。。。。
结果还是一样,最后的赢家是a玩家
废话不多说,上代码
//参数一:玩家列表
//参数二:传的数字
const flowers = function (wanjia, num) {
// 把所有的玩家放在一个队列中
var queue = new Queue();
wanjia.map(item => {
queue.enQueue(item)
})
var taotai;
while (queue.size() > 1) {
// 把拿到不等于num的玩家,重新放在队列的最后
for (let i = 1; i < num; i++) {
queue.enQueue(queue.deQueue())
}
// 把拿到等于num的玩家出队(淘汰的玩家)
taotai = queue.deQueue();
console.log("淘汰的玩家是:", taotai);
}
// return 最后的赢家
return queue.deQueue()
}

优先队列
什么是优先队列?
比如我们住酒店上电梯,所有人都在排队,但是酒店会员(vip)他们就有权限优先上电梯
在比如在机场登机,vip会员就有权限优先登机等。
const PriorityQueue = function () {
const items = [];
// 定义一个辅助类,用来生成对象(构造器)
this.itemQueue = function (element, vipnumber) {
this.element = element
this.vipnumber = vipnumber
}
// 入列
this.enQueue = function (element, vipnumber) {//vipnumber相当等级,等级越高优先级越高
const itemqueue = new itemQueue(element, vipnumber);
const whether = false
for (let i = 0; i < items.length; i++) {
if (items[i].vipnumber < itemqueue.vipnumber) {
items.splice(i,0,itemqueue);
whether = true;
break; //跳出循环
}
}
if(!whether){
items.push(itemqueue)
}
}
// 返回items
this.getItems = function(){
return items
}
}
// 辅助类用来生成对象
const itemQueue = function (element, vipnumber) {
this.element = element
this.vipnumber = vipnumber
}
let itemqueue = new itemQueue("张参", 18)
console.log(itemqueue1); //{element: '张参1', vipnumber: 18}


2137

被折叠的 条评论
为什么被折叠?



