读《啊哈!算法》——队列

队列,就是一组有头有尾的数。。。他们有个优良传统就是先进先出。大概就是下图这个样子:

队列

话说有这样一道题(来源书中的例题啦):
有一组数:8 0 3 3 9 8 2 6 4,这些数字是由我的QQ号打乱顺序而成的,解密规则是:删除第一个数,第二个数放到剩下这串数字的末尾。删除第三个数,第四个数再放到剩下这串数字的末尾...以此类推,直到所有的数字都被删除,删除的这些数字按照先后顺序组起来就是我的QQ号啦~

思路:head代表队首,tail代表队尾指向队尾最后一个数,每删除一个数head++,需要挪到队尾的数时tail - -。

        var q = Array(100);
        var head = 1, tail = 1;
        for(var i=1;i<10;i++){
            q[i] = prompt('给数组添加值');
            tail++;
        }
        while(head < tail){
            console.log(q[head]);
            head++;
            q[tail] = q[head];
            tail++;
            head++;
         }       

升级:原书是用C语言写的算法,也用到了结构体描述了了一个数组一个队首一个队尾的类型。我也不知道模仿的对不对,JavaScript中没有结构体,但是有对象啊,我就用对象当的结构体写的。。。

        var q = {
            'queue': Array(100),
            'head': 1,
            'tail':1
        };
        for(var i=1;i<10;i++){
            q.queue[i] = prompt('给数组添加值');
            q.tail++;
        }
        while(q.head < q.tail){
            console.log(q.queue[q.head]);
            q.head++;
            q.queue[q.tail] = q.queue[q.head];
            q.tail++;
            q.head++;
        }

大概就是这样子。。。。BTW,上边求出来的QQ真是我的QQ。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容