队列,就是一组有头有尾的数。。。他们有个优良传统就是先进先出。大概就是下图这个样子:
话说有这样一道题(来源书中的例题啦):
有一组数: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。。。