zoukankan      html  css  js  c++  java
  • 使用javaScript实现一个双端队列

    1.双端队列,一种允许我们从队列的前面和后面添加和删除元素的队列。

    2.创建一个双端队列的类

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

    3.判断队列是否为空

        isEmpty(){
            return this.size() === 0;
        }

    4.获取队列的长度

        size(){
            return this.count - this.lowestCount;
        }

    5.从队列头部添加元素

        addFront(element){
            if(this.size()==0){
                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.count++;
                this.lowestCount = 0;
                this.items[0] = element;
            }
        }

     6.从队列尾部添加元素

        addBack(element){
            this.items[this.count] = element;
            this.count++;
        }

    7.查看队列头部元素

        peekFront(){
            return this.items[this.lowestCount];
        }

    8.查看队列尾部元素

        peekBack(){
            return this.items[this.count-1];
        }

    9.移除队列头部元素

        removeFront(){
            if(this.isEmpty()) return 'queue is null';
            let result = this.items[this.lowestCount];
            delete this.items[this.lowestCount];
            this.lowestCount++;
            return result;
        }

    10.移除队列尾部元素

        removeBack(){
            if(this.isEmpty())return "deque is null";
            this.count--;
            let result = this.items[this.count];
            delete this.items[this.count];
            return result;
        }

    11.打印队列的所有元素

        toString(){
            if(this.isEmpty())return 'deque is null';
            let objString = `${this.items[this.lowestCount]}`;
            for(let i = this.lowestCount+1;i < this.count; i++){
                objString = `${objString},${this.items[i]}`;
            }
            return objString;
        }

    12.清除队列的元素

        clear(){
            this.count = 0;
            this.lowestCount = 0;
            this.items = {};
        }

    13.完整代码

    class Deque{
        constructor(){
            this.lowestCount = 0;
            this.count = 0;
            this.items = {};
        }
        isEmpty(){
            return this.size() === 0;
        }
        size(){
            return this.count - this.lowestCount;
        }
        addFront(element){
            if(this.size()==0){
                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.count++;
                this.lowestCount = 0;
                this.items[0] = element;
            }
        }
        addBack(element){
            this.items[this.count] = element;
            this.count++;
        }
        peekFront(){
            return this.items[this.lowestCount];
        }
        peekBack(){
            return this.items[this.count-1];
        }
        removeFront(){
            if(this.isEmpty()) return 'queue is null';
            let result = this.items[this.lowestCount];
            delete this.items[this.lowestCount];
            this.lowestCount++;
            return result;
        }
        removeBack(){
            if(this.isEmpty())return "deque is null";
            this.count--;
            let result = this.items[this.count];
            delete this.items[this.count];
            return result;
        }
        toString(){
            if(this.isEmpty())return 'deque is null';
            let objString = `${this.items[this.lowestCount]}`;
            for(let i = this.lowestCount+1;i < this.count; i++){
                objString = `${objString},${this.items[i]}`;
            }
            return objString;
        }
        clear(){
            this.count = 0;
            this.lowestCount = 0;
            this.items = {};
        }
    }

    14.结果

  • 相关阅读:
    第二期冲刺站立会议个人博客6(2016/5/30)
    第二期冲刺站立会议个人博客5(2016/5/29)
    “进度条”博客——第十三周
    第二次冲刺个人工作总结07
    第二次冲刺个人工作总结06
    第十三周学习进度
    第二次冲刺个人工作总结05
    第二次冲刺个人工作总结04
    课堂实验--贴吧找水王问题续
    第二次冲刺个人工作总结03
  • 原文地址:https://www.cnblogs.com/MySweetheart/p/13211685.html
Copyright © 2011-2022 走看看