隊列,就是一組有頭有尾的數。。。他們有個優良傳統就是先進先出。大概就是下圖這個樣子:
隊列
話說有這樣一道題(來源書中的例題啦):
有一組數: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。。。