数据结构--队列的基本方法

队列是一种列表,不同的是只能在队尾插入元素,在队首删除元素。它是一种先进先出的数据结构,队列的主要操作就是入队和出队以及读取队头的元素,这个操作叫做peek()。该操作返回队头元素,但不把它从队列中删除。除了读取队头元素,我们还想知道队列中存储了多少元素,可以使用length属性满足该需求;要想清空队列中的所有元素,可以使用clear() 方法来实现。

1、入队enqueue

首先,dataStore是我申请的一个数组,它是在方法内部被定义,即dataStore = [ ];

入队操作首先要获取当前数组dataStore的长度,因为队列是从队尾添加数据,所以我只需要将传入的数据data添加到数组的最后一个数据的下一个位置就可以了,那为什么是length呢?数组下标是从0开始取的,一般来说,它的最后一个下标是length-1,现在我要添加数据,很显然就应该在队尾,也就是length-1的下一个位置,即length;

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

2、出队dequeue

队列是先进先出的,所以,删除数据应该从队首开始;

首先,将队首的数据存储到head里;

然后,你想啊,如果我把队首删除了之后,是不是应该有新的队首,所以,我后面的数据是不是都应该往前移动一位?现在我需要做的就是让它的dataStore数组里的后一位等于前一位,其实,这里就是赋值,即dataStore[i-1]=dataStore[i];

接下来,我把除队首以外所有数据都往前移动了一位,那么最后的那个位置是不是就没数据了啊?当然不是,最后的那个位置的数还是原来的数据,我只是把它的后一个数据的值赋值给前一个数据,所以这里是覆盖,并不是真正意义上的移动。因此,我要将最后那位数据置空,然后让数组长度减1,那个空数据就不会再占位置了,就实现了删除的效果。

//从队列头部删除数据,并且获得这个数据
this.dequeue=function () {
    var length = this.dataStore.length;
    var head = 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 head;
}

3、获得队列最前面数据front

想必这个就不用多说了,就是第一个位置的数据,下标显然是0,最后一个数据,下标是length-1。

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

4、获得队列最后面数据back

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

5、返回数据toString

//依次返回当前队列的数据
this.toString=function () {
    var length = this.dataStore.length;
    for(var i=0;i<length;i++){
        return this.dataStore;
    }
}

6、判断是否为空empty

如果数组长度为0,说明此时队列里面没有数据,返回为真,反之则假。

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

7、遍历数据forEach

遍历出队列里面的数据,最后返回的是队列里面的数据以及它的下标。

//遍历当前队列的数据
this.forEach=function (call) {
    var length = this.dataStore.length;
    for(var i=0;i<length;i++){
        call(this.dataStore[i],i);
    }
}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值