javascript数据结构与算法--队列
来源:互联网 发布:软件封装 可视化代码 编辑:程序博客网 时间:2024/06/05 10:34
引言
队列是遵循先进先出(FIFO)的数据存储结构。当然js中的栈也是建立在array基础上的,对array不熟悉的伙伴可以看一下我写的关于array的博文javascript基础–Array
1.队列的创建
function Queue(){ var items = [];//存储队列内容 //enqueue方法向队列尾部添加元素 this.enqueue = function(element){ items.push(element); }; //dequeue方法移除队列首部元素 this.dequeue = function(){ return items.shift(); }; //front返回队列第一个元素,队列内容保持不变 this.front = function(){ return items[0]; }; //isEmpty判断队列内容是否为空 this.isEmpty = function(){ return items.length == 0; }; //clear清除队列所有内容 this.clear = function(){ items = []; }; //size返回队列内容长度 this.size = function(){ return items.length; }; //print打印队列所有内容 this.print = function(){ console.log(items.toString()); };}
2.队列的使用
var queue = new Queue();console.log(queue.isEmpty());//truequeue.enqueue("John");queue.enqueue("Jack");queue.enqueue("Camila");queue.print();//["John","Jack","Camila"]console.log(queue.size());//3console.log(queue.isEmpty());//falsequeue.dequeue();queue.dequeue();queue.print();//['Camila']
3.优先队列
什么是优先队列,举个例子,拍卖,谁给的钱越多就卖给谁,不管你什么时候来的,不管你有多想要,没钱就排在后面捡剩下的。这和优先队列逻辑一致,每个元素都有自己的优先级,优先级越高,就不管先来后到,有“钱”(优先级高)就是王道。我们可以在默认队列上入列操作上做文章,使队列元素按照优先级进行排列,然后按照传统的队列操作元素即可。上代码。
function PriorityQueue(){ //priority越小,优先级越高 var items = []; //构造元素,包含element和priority两个属性 function QueueElement(element,priority){ this.element = element; this.priority = priority; } //改写入列操作,使元素按优先级排列 this.enqueue = function(element,priority){ var queueElement = new QueueElement(element,priority); if(this.isEmpty()){ //如果队列是空的,直接插入元素 items.push(queueElement); }else{ //队列非空,则需要遍历元素,比较优先级,将该元素插入优先级比自己低的前面 var added = false; for(var i = 0;i < items.length;i++){ if(queueElement.priority < items[i].priority){ items.splice(i,0,queueElement); added = true; break; }//如果优先级最低,则直接插入末尾 if(!added){ items.push(queueElement); } } }; //其他操作与默认队列Queue一致 }}
使用优先队列:
var priorityQueue = new PriorityQueue();priorityQueue.enqueue("John",2);//['John']priorityQueue.enqueue("Jack",1);//['Jack','John']priorityQueue.enqueue("Camila",1);//['Jack','Camila','John']priorityQueue.print();
4.循环队列
循环队列是什么?如果你把队列想象成一根管道,那么你把管道首尾相连便是循环队列了。循环队列的一个例子便是击鼓传花游戏,孩子们围成一个圈,开始传花,某一时刻停止,花在谁手里谁就被淘汰,直到剩下最后一名胜利者。上代码:
function resycleQueue(namelist, time){ var queue = new Queue(); //将游戏参与者姓名存入队列 for(var i = 0;i < namelist.length;i++){ queue.enqueue(namelist[i]); } var loser = ''; while(queue.size()>1){ for(var j = 0;j < time;j++){ //将队列头部移除的元素插入队列尾部实现循环 queue.enqueue(queue.dequeue()); } //循环结束,移除淘汰者 loser = queue.dequeue(); consolo.log(loser+"被淘汰"); } //队列元素只剩一个,返回最终胜利者 return queue.dequeue();} var names = ['A','B','C']var winner = resycleQueue(names,10);console.log('winner is' + winner);
结束语
将队列和生活中的示例结合起来学习,会加强自己的理解,队列,get!!!
0 0
- 数据结构与算法JavaScript - 队列
- javascript数据结构与算法--队列
- 数据结构与算法JavaScript (二) :队列
- 数据结构与算法javascript描述之队列
- JavaScript数据结构与算法Item3--队列
- 学习JavaScript数据结构与算法(一):栈与队列
- 【数据结构与算法】队列
- 数据结构与算法《队列》
- 数据结构与算法-队列
- 数据结构与算法--队列
- 数据结构与算法---队列
- 数据结构与算法-队列
- JavaScript描述数据结构与算法——队列
- 数据结构与算法javascript描述(二) 优先队列实例
- 数据结构与算法Javascript描述(二)队列
- 数据结构与算法JavaScript描述[第五章](队列)
- 学习JavaScript数据结构与算法(三)——队列
- JavaScript 版数据结构与算法(二)队列
- Round E APAC Test 2017 Problem B. Beautiful Numbers
- Hibernate 一对多双向关联
- 日期加减
- 读书笔记2-《crazy java》
- 计算几何入门
- javascript数据结构与算法--队列
- jQuery 中对 each 及 sort 方法的详解
- removeEventListener('2016');
- UVA12100:Printer Queue(打印队列)
- 1025. 反转链表 (25)
- HDU-4553-约会安排(线段树维护最长连续区间)
- 文章标题 coderforces 148D : Bag of mice (概率DP)
- c++迭代器(iterator)详解
- Leetcode 368 - Largest Divisible Subset(dp)