大家好,欢迎来到IT知识分享网。
/* 1.队列
队列是遵循先进先出(FIFO,也称为先来先服务)原则的一组有序的项。
队列在尾部添加新 元素,并从顶部移除元素。
最新添加的元素必须排在队列的末尾 */
class Queue { constructor(){ this.count = 0; this.lowestCount = 0; // 由于我们将要从队列前端移除元素,同样需要一个变量来帮助我们追踪第一个元素 this.items = {}; } // 向队列添加元素 enqueue(element) { this.items[this.count] = element; this.count++; } // 检查队列是否为空并获取它的长度 isEmpty() { return this.count - this.lowestCount === 0; } // 从队列移除元素 dequeue() { if(this.isEmpty()){ return undefined; } const result = this.items[this.lowestCount]; delete this.items[this.lowestCount]; this.lowestCount++; return result; } // 从队列移除元素 peek() { if(this.isEmpty()){ return undefined; } return this.items[this.lowestCount]; } // 清空队列 clear(){ this.items = {}; this.count = 0; this.lowestCount = 0; } // 创建 toString 方法 /* 在 Stack 类中,我们从索引值为 0 开始迭代 items 中的值。由于 Queue 类中的第一个索引 值不一定是 0,我们需要从索引值为 lowestCount 的位置开始迭代队列。 */ toString() { if(this.isEmpty()){ return ''; } let objString = `${this.items[this.lowestCount]}`; for (let i = this.lowestCount + 1; i < this.count; i++) { objString = `${objString},${this.items[i]}` } } }
/* 双端队列(deque,或称 double-ended queue)是一种允许我们同时从前端和后端添加和移除 元素的特殊队列 由于双端队列同时遵守了先进先出和后进先出原 则,可以说它是把队列和栈相结合的一种数据结构。 既然双端队列是一种特殊的队列,我们可以看到其构造函数中的部分代码和队列相同,包括 相同的内部属性和以下方法:isEmpty、clear、size 和 toString。 */ class Deque { constructor(){ this.count = 0; this.lowestCount = 0; this.items = {}; } // 检查队列是否为空并获取它的长度 isEmpty() { return this.count - this.lowestCount === 0; } // 向队列添加元素 addBack(element) { this.items[this.count] = element; this.count++; } // 向双端队列的前端添加元素 addFront(element) { if(this.isEmpty()){ this.addBack(element); } else if(this.lowestCount>0){ this.lowestCount--; this.items[this.lowestCount] = element; } else{ for (let i = this.count; i > 0; i--) { // {3} this.items[i] = this.items[i - 1]; } this.count++; this.lowestCount = 0; this.items[0] = element; // {4} } } }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32512.html