数据结构与算法 ----- 队列

Posted samweb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构与算法 ----- 队列相关的知识,希望对你有一定的参考价值。

  队列和栈类似,也是一种集合,只不过它遵循的原则是先进先出,这很好理解,想一想ATM机取款就可以了。先到的人,先取款,后面到的人只能等前面的人取款成功。所以队列的操作是从前面删除元素,后面插入元素,其它则和栈没有什么区别。它有以下几种操作:

  插入(enqueue):把一个元素插入到队列的后面;

  删除(dequeue): 把一个元素从队列的顶部删除;

  取出队列顶部的元素(front): 返回队列的顶部的元素;

  判队列空(isEmpty): 判断队列是否为空;

  清空队列(clear):把队列中所有的元素删除;

  队列的大小(size):返回队列中元素的个数;

  实现方式还是用数组

function queue() {
    let items = [];

    this.enqueue = function(elem) {     // 队列尾部添加元素
        items.push(elem);
    }
    this.dequeue = function(elem) {     // 队列头部删除元素
        return items.shift();
    }

    this.front = function () {           // 返回队列中的第一个元素
        return items[0];
    }

    this.isEmpty = function() {          // 队列是否为空
        return items.length === 0;
    }

    this.size = function() {             // 队列的大小
        return items.length;
    }

    this.print = function() {            // 打印队列
        console.log(items);
    }
}
// es6 的原型链方式
let queue2 = (function() {
    const items = new WeakMap();

    class Queque {
        constructor(){
            items.set(this, []);
        }

        enqueue(elem) {
            let q = items.get(this);
            q.push(elem);
        }

        dequeue() {
            let q = items.get(this);
            return q.shift();
        }
        front() {
            let q = items.get(this);
            return q[0];
        }
        isEmpty() {
            return items.get(this).length === 0;
        }
        size() {
            return items.get(this).length;
        }
        clear() {
            items.set(this, []);
        }
        print() {
            console.log(items.get(this))
        }
    }
    return Queque;
})()

  优先队列

  

 

以上是关于数据结构与算法 ----- 队列的主要内容,如果未能解决你的问题,请参考以下文章

栈与队列:链队列算法+可执行代码

数据结构与算法--队列

数据结构与算法系列七(队列)

数据结构与算法—稀疏数组和队列

《图解数据结构与算法》(Java代码实现注释解析算法分析)

Python数据结构与算法---双端队列deque