小谈算法

如下图是在移动端最常见的滑动banner.

问题是:3张图片,当如图2,滑动到第三张,继续向左滑动,如何重新回到第一张,从而实现反复循环的滚动。

1.png
2.png

思考后,问题变为如何取到下一张图片

算法1:
//伪代码
imgs= [1.png,2.png,3.png]
for(i=0;i<MAX;i++){

next = MAX % 3 //取余数,3是图片数据的长度imgs.length

}

算出来的next就是下一张图片的索引。

还能想到什么算法呢? 仔细想想,这个和我们常用的一个数据结构非常像,什么呢?

队列,没错就是Queue

算法2:

function Queue(){
        this.dataStore = [];
        this.enqueue = enqueue;
        this.dequeue = dequeue;
        this.front = front;
        this.back = back;
        this.toString = toString;
        this.empty = empty;
}

//入队,就是在数组的末尾添加一个元素
function enqueue(element){
    this.dataStore.push(element);
}
//出队,就是删除数组的第一个元素
function dequeue(){
    return this.dataStore.shift();
}
//取出数组的第一个元素
function front(){
    return this.dataStore[0];
}
//取出数组的最后一个元素
function back(){
    return this.dataStore[this.dataStore.length-1];
}

function toString(){
    var retStr = "";
    for (var i=0; i<this.dataStore.length; ++i) {
        retStr += this.dataStore[i] + "&nbsp;"
    }
    return retStr;
}
//判断数组是否为空
function empty(){
    if(this.dataStore.length == 0){
        return true;
    }else{
        return false;
    }    
}
//返回数组中元素的个数
function count(){
    return this.dataStore.length;
}

var q = new Queue();

q.enqueue("1.png");
q.enqueue("2.png");
q.enqueue("3.png");

循环操作
img=q.dequeue();
q.enqueue(img);

这样通过队列先进先出的特性,反复的出队,进队。因为出队是从队头出,而入队都是从队尾进。因此自然也就是形成不断循环的效果。

关于对列实现的代码,参考https://www.cnblogs.com/tylerdonet/p/5837730.html
作者还在文中提了基于队列做排序的算法,也是不错的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术与健康

你的鼓励将是我最大的创作动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值