什么是对列
是一种“先进先出”的数据结构。(如排队候车,肯定是先排队的人先上车)
实际用处
如打印机
队列操作
使用数组实现队列结构
使用类封装队列操作
const Queue = function () {
const items = [];
this.enQueue = function (element) {
items.push(element)
}
this.deQueue = function(){
return items.shift()
}
this.front = function(){
return items[0]
}
this.isEmpty = function(){
return items.length == 0
}
this.size = function(){
return items.length
}
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) {
for (let i = 1; i < num; i++) {
queue.enQueue(queue.deQueue())
}
taotai = queue.deQueue();
console.log("淘汰的玩家是:", taotai);
}
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) {
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)
}
}
this.getItems = function(){
return items
}
}
const itemQueue = function (element, vipnumber) {
this.element = element
this.vipnumber = vipnumber
}
let itemqueue = new itemQueue("张参", 18)
console.log(itemqueue1);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)