JavaScript 实现双端队列详解

作者:函数茶馆

时间:2026-10-24

浏览:467

本文介绍如何使用 JavaScript 实现双端队列(Deque)数据结构。双端队列允许从前端和后端同时添加和移除元素。文章详细讲解了 addFront、addBack、removeFront、removeBack 等核心方法,并提供了完整的 JavaScript 类实现代码,帮助开发者理解其应用场景与具体编码实现。

文章目录

以下通过具体代码示例,展示如何在 JavaScript 中实现双端队列,供读者参考。

1. 双端队列概念

双端队列(Deque)是一种特殊的线性结构,支持从队列的前端和后端同时进行元素的插入与删除操作。

2. 双端队列的应用场景

在实际场景中,例如售票队伍,若刚购票者仅需补充少量信息,可直接返回队首;若队尾人员时间紧迫,也可直接从队尾离开。

3. 双端队列的核心方法

双端队列主要包含以下操作方法: - addFront(element):在双端队列的前端添加新元素。 - addBack(element):在双端队列的后端添加新元素,其实现逻辑与标准队列(Queue)中的 enqueue 方法一致。 - removeFront():从双端队列的前端移除并返回第一个元素。 - removeBack():从双端队列的后端移除并返回第一个元素。 - peekFront():返回双端队列前端的元素,但不移除。 - peekBack():返回双端队列后端的元素,但不移除。

4. 代码实现


class Deque{
           constructor(){
               this.items = {};
               this.count = 0;
               this.lowestCount = 0; 
           }

        // 在双端队列前端添加新元素
        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--){
                    this.items[i] = this.items[i-1]; 
                }
                this.lowestCount = 0;
                this.items[this.lowestCount] = element;
                this.count++;
            }
        };
        addBack(element){
            this.count++;
            this.items[this.count-1] = element;
        };
        removeFront(){
            if(this.isEmpty()){
                return undefined;
            }
            const result = this.items[this.lowestCount];
            delete this.items[this.lowestCount];
            this.lowestCount++;
            return result;
        };
        removeBack(){
            if(this.isEmpty()){
                return undefined;
            }
            const result = this.items[this.count-1];
            delete this.items[this.count-1];
            this.count--;
            return result;
        };
        peekFront(){
            if(this.isEmpty()){
                return null;
            }
          return   this.items[this.lowestCount];
        };
        peekBack(){
            if(this.isEmpty()){
                return null;
            }
            return this.items[this.count-1];
        };
        isEmpty(){
            return this.count - this.lowestCount == 0;
        }
        size(){
            return  this.count - this.lowestCount;
        }
        toString(){
            if(this.isEmpty()){
                return '';
            }
            let objString = `${this.items[this.lowestCount]}`;
            for(var i=this.lowestCount+1;i<this.count;i++){
                objString = `${objString},${this.items[i]}`;
            }
            return objString;
        }
        clear(){
            this.items={};
            this.count = 0;
            this.lowestCount = 0;
        }
   

       }

       const deque = new Deque();
       deque.addFront('John');
       deque.addFront('Jack');
       deque.addFront('Amy');
       deque.addBack('Lisa');
    //    deque.removeFront();
    //    deque.removeBack();
    console.log(deque.size());
    console.log(deque.toString());
    console.log(deque);
    console.log(deque.isEmpty());
       console.log(deque.clear());
       console.log(deque);

以上内容为本文的全部介绍,希望能为读者的学习提供有益帮助,同时也欢迎持续关注本站获取更多技术分享。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章