队列-双端队列

队列-双端队列/*1.队列队列是遵循先进先出(FIFO,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾*/classQueue{constructor(){this.count=0;this.lowestCount=0

大家好,欢迎来到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

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信