欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

javascript实现双端队列

程序员文章站 2022-03-16 21:01:37
本文实例为大家分享了javascript实现双端队列的具体代码,供大家参考,具体内容如下1.双端队列双端队列是一种允许我们同时从前端和后端添加和移除元素的特殊队列2.双端队列的应用一个刚买了票的入如果...

本文实例为大家分享了javascript实现双端队列的具体代码,供大家参考,具体内容如下

1.双端队列

双端队列是一种允许我们同时从前端和后端添加和移除元素的特殊队列

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);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关标签: js 双端队列