队列和栈类似,也是一种集合,只不过它遵循的原则是先进先出,这很好理解,想一想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; })()
优先队列