当前位置:   article > 正文

数据结构--队列的基本方法_数据采用队列取前三大值

数据采用队列取前三大值

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

1、入队enqueue

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

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

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

2、出队dequeue

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

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

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

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

  1. //从队列头部删除数据,并且获得这个数据
  2. this.dequeue=function () {
  3. var length = this.dataStore.length;
  4. var head = this.dataStore[0];
  5. for(var i=1;i<length;i++){
  6. this.dataStore[i-1]=this.dataStore[i];
  7. }
  8. this.dataStore[length-1]=null;
  9. this.dataStore.length--;
  10. return head;
  11. }

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

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

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

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

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

5、返回数据toString

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

6、判断是否为空empty

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

  1. //判断当前队列是否为空
  2. this.empty=function () {
  3. if(this.dataStore.length==0){
  4. return true;
  5. }
  6. else{
  7. return false;
  8. }
  9. }

7、遍历数据forEach

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

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

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/960685
推荐阅读
相关标签
  

闽ICP备14008679号