本文最后更新于:8 个月前
本博客参考于洛伊安妮·格罗纳编著的javascript数据结构与算法第三版及codeWay老师视频或其他博客资料,在此对此表示感谢!
github仓库:https://github.com/hzx17/
基本队列
认识队列
队列(Queue)是一种运算受限的线性表,特点:先进先出。(FIFO:First In First Out)
受限之处:
- 只允许在表的前端(front)进行删除操作。
- 只允许在表的后端(rear)进行插入操作。
生活中类似队列结构的场景:
- 排队,比如在电影院,商场,甚至是厕所排队。
- 优先排队的人,优先处理。 (买票、结账、WC)。
基本队列的封装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| function Queue(){ this.items=[]; Queue.prototype.enqueue=function(element){ this.items.push(element) } Queue.prototype.dequeue=function(){ return this.items.shift(); } Queue.prototype.showqueue=function(){ return this.items[0] } Queue.prototype.spliceelement=function(index,count){ return this.items.splice(index,count) } Queue.prototype.isEmpty=function(){ return this.items.length==0 } Queue.prototype.elementnum=function(){ return this.items.length; } Queue.prototype.toString=function(){ let resultString=""; for(var i=0;i<this.items.length;i++){ resultString +=this.items[i]+"" } return resultString } }
|
优先级队列
优先级队列使用场景
生活中类似优先队列的场景:
- 优先排队的人,优先处理。 (买票、结账、WC)。
- 排队中,有紧急情况(特殊情况)的人可优先处理。
优先级队列主要考虑的问题:
- 每个元素不再只是一个数据,还包含优先级。
- 在添加元素过程中,根据优先级放入到正确位置。
优先级队列的封装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| function PriorityQueue(){ function QueueElement(element,priority){ this.element=element; this.priority=priority; } this.items=[]; PriorityQueue.prototype.enqueue=function(element,priority){ const queueElement=new QueueElement(element,priority); if(this.items.length==0){ this.items.push(queueElement)
}else{ var added=false; for(let i=0;i<this.items.length;i++){ if(this.items[i].priority>queueElement.priority){ this.items.splice(i,0,queueElement); added=true; break; } } if(!added){ this.items.push(queueElement) } } } PriorityQueue.prototype.toString=function(){ let resultString=""; for(var i=0;i<this.items.length;i++){ resultString +=this.items[i]+"" } return resultString }
}
var priorityQueue=new PriorityQueue();
priorityQueue.enqueue("何治兴",153); priorityQueue.enqueue("李玉成",323); priorityQueue.enqueue("李阳",223); priorityQueue.enqueue("zhangsan",310);
console.log(priorityQueue)
|