双向队列的底层写法

本文介绍了一种使用数组实现双向队列的方法,支持从队列两端进行元素的添加和删除操作。文章详细解释了enqueue、enqueuehead、dequeue、dequeueback等核心方法,并提供了完整的JavaScript代码实现。

        允许从队列两端添加和删除元素,因此也叫双向队列。

function Deque() {
    this.dataStore = [];

    //进队列,从尾部添加数据
    this.enqueue = function (data) {
        var length = this.length();
        this.dataStore[length] = data;
    }

    //进队列,从头部添加数据
    this.enqueuehead = function (data) {
        var length = this.length();
        for(var i=length;i>=1;i--) {
            this.dataStore[i] = this.dataStore[i-1];
        }
        this.dataStore[0] = data;
    }

    //从队列头部删除数据,并且获得这个数据
    this.dequeue=function () {
        var length = this.length();
        var front = this.dataStore[0];
        for(var i=1;i<length;i++) {
            this.dataStore[i-1] = this.dataStore[i];
        }
        this.dataStore[length-1] = null;
        this.dataStore.length--;
        return front;
    }

    //从队列尾部删除数据,并且获得这个数据
    this.dequeueback=function () {
        var length = this.length();
        var back = this.dataStore[length-1];
        this.dataStore[length-1] = null;
        this.dataStore.length--;
        return back;
    }

    //依次返回当前队列的数据
    this.toString=function () {
        return this.dataStore.toString();
    }

    //获得队列最前面的数据
    this.front=function(){
        return this.dataStore[0];
    }

    //获得队列最后面的数据
    this.back=function () {
        return this.dataStore[this.dataStore.length-1];
    }

    //判断当前队列是否为空
    this.empty=function () {
        if(this.dataStore.length==0){
            return true;
        }
        else{
            return false;
        }
    }

    //获取队列的长度
    this.length = function () {
        return this.dataStore.length;
    }

    //遍历队列
    this.forEach = function (call) {
        //获得队列的长度
        var length = this.length();
        for(var i=0;i<length;i++) {
            call(this.dataStore[i]);
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值