赞
踩
队列是一种列表,不同的是只能在队尾插入元素,在队首删除元素。它是一种先进先出的数据结构,队列的主要操作就是入队和出队以及读取队头的元素,这个操作叫做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);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。