数据结构:用JS实现队列
来源:互联网 发布:php个人中心源码 编辑:程序博客网 时间:2024/06/05 00:17
队列特点:遵循先进先出(FIFO)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。
创建队列
首先,创建一个类来表示一个队列。
function Queue () {}
同样,我们选择数组来存储队列中的元素。
var items = [];
接下来,我们考虑一下为这个队列声明哪些方法:
- enqueue(element):向队列尾部添加一个新的项。
- dequeue():移除队列的第一项,并返回被移除的项。
- front():返回队列中的第一个元素,队列不做任何变动。
- isEmpty():判断队列是否为空。
- size():返回队列长度。
function Queue () { var items = []; this.enqueue = function (element) { items.push(element); }; 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; }; this.print = function () { console.log(items.toString()); };}
嗯,我们已经算是创建一个较为完整的队列了,接下来,我再说说其它的。
优先队列
优先队列元素的添加和移除是基于优先级的。拿医院候诊室举例,医生会优先处理病情比较严重的患者。
function PriorityQueue () { var items = []; //每个元素都包含要添加到队列的元素,以及在队列中的优先级 function QueueElement (element, priority) { this.element = element; this.priority = priority; } this.enqueue = function () { var queueElement = new QueueElement(element, priority); //当队列为空,直接添加 if (this.isEmpty()) { items.push(queueElement); }else { var added = false; //循环比较所添加元素和队列中元素优先级 //当找到比要添加元素优先级更大的项时,就把新元素插入到它之前(priority越小,优先级越高) //优先级相同,遵循先进先出原则 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实现相同}
循环队列——击鼓传花
还有一个修改版的队列实现,那就是循环队列。我们拿击鼓传花这个例子来实现循环队列。
在游戏中,孩子们围成一个圆圈,把花传给旁边的人,某一时刻传花停止,拿着花的孩子结束游戏,重复这个过程,直到剩下一个孩子(胜者)。
function hotPotato (nameList, num) { var queue = new Queue; var eliminated = ""; for (var i = 0; i < nameList.length; i++) { queue.enqueue(nameList[i]);//将玩游戏孩子名字加入队列 } while (queue.size() > 1) { //从队列开头移除一项,再将其添加到队列末尾 for (var i = 0; i < num; i++) { queue.enqueue( queue.dequeue() ); } eliminated = queue.dequeue(); console.log(eliminated + "被淘汰"); } return queue.dequeue();}var names = ["小明", "小花", "小黄", "小易", "小华"];var winner = hotPotato(names, 5);//可以改变传入数字,模拟不同场景console.log("胜利者:" + winner);
控制台模拟结果如图:
阅读全文
1 0
- 数据结构:用JS实现队列
- 用数组实现js中的堆栈 或者队列数据结构
- 数据结构-用数组实现队列
- JS数据结构: 队列
- JS的基本数据结构实现---栈和队列
- 用两个栈实现队列[数据结构]
- 用C语言模块实现队列数据结构
- 用两个栈实现队列[数据结构]
- 【数据结构】用两个队列实现一个栈
- 数据结构:用队列实现栈 C++
- 【数据结构】用两个栈实现队列
- 数据结构--用C实现链式队列
- 【数据结构】之用堆实现优先队列
- 数据结构 队列的实现
- 用链表实现队列数据结构
- 数据结构:队列的实现
- 【数据结构】 队列的实现
- 数据结构---队列实现
- office 2016和visio 2016安装说明
- 保卫方案(京东2017笔试题)
- [JSOI2007]重要的城市(x)(洛谷1841)
- 我眼中的MyEclipse、Eclipse、IntelliJ IDEA
- C语言中实现十进制转二进制输出
- 数据结构:用JS实现队列
- JavaScript 事件委托详解
- HNOI2012永无乡
- CSR(compressed sparse row matrix)
- [LeetCode]171. Excel Sheet Column Number ❤
- 提取日期的数字部分
- Markdown基本语法
- Java 网络处理(net io URL 等)
- INQ(incremental network quantization:towards lossless CNNs with low-precision weights