Javascript数据结构与算法学习(二)——队列

什么是队列?

队列(Queue)—— 一种先入先出(FIFO)的数据结构。队列只能在队尾插入元素(push),在队首删除元素(shift),这一点跟栈(LIFO)结构是不同的,可以看成“排队”

队列的操作

  • 入列:enqueue
  • 出列:dequeue
  • 查看列头:front
  • 不否为空:isEmpty
  • 队列大小: size

因为JS是一门高级语言,所以对于实现队列,借助数组可以很好的实现

function Queue(){
    var items = [];
    this.enqueue = function(item){
        items.push(item)
    }
    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
    }
}

队列的实践—— 击鼓传花

描述:从0开始传,每传到第3位时,删除第3位,直到最后一们
原理:每次取出队列前一位放到队列尾,当到第三位时,移除

function delevery(names,number){
    var queue = new Queue();
    for(let i=0;i<names.length;i++){
        queue.enqueue(names[i])
    }
    while(queue.length>1){
        for(let i=1;i<number;i++){
            queue.enqueue(queue.dequeue())
        }
        queue.dequeue();
    }
    console.log(queue.front())
}
var names = ['a','b','c','d','e','f'];
delevery(names,3);

优先队列和辅助类

优先队列: 根据元素的优先级,队列中元素有不同的出列顺序。如 飞机–高级会员–优先登机 。
在一般情况下,从队列中删除的元素,一定是率先入队的元素。但有的特殊情况不用遵守先进先出的约定。

function PriorityQueue(){
    var items = []
    // 辅助类
    var QueueItem = function (name,priority){
        this.name = name;
        this.priority = priority
    }
    this.enqueue = function(ele,priority){
        var queueItem = new QueueItem(ele,priority);
        var added = false;
        for(let i=0;i<items.length;i++){
            if(queueItem.priority>items[i].priority){
                items.splice(i,0,queueItem)
                added= true;
                break;
            }
        }
        if(!added){
            items.push(queueItem)
        }
    }
    this.showQueue = function(){
        console.log(items)
    }
}
var test = new PriorityQueue();
test.enqueue('小明',5)
test.enqueue('小黑',12)
test.showQueue()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sophie_U

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值