之前我們已經實現了一個Queue的構造函數。這裏使用它來模擬一個擊鼓傳花的遊戲。
function hotPotato(name_list, num) {
var queue = new Queue();
for(var i=0; i<name_list.length; ++i) {
queue.enqueue(name_list[i]);
}
var eliminated = "";
var round = 1;
while(queue.size() > 1) {
for(var i=0; i<num; ++i) {
queue.enqueue(queue.dequeue());
}
elimated = queue.dequeue();
console.log("Round " + (round++) + ": " + elimated);
}
return queue.dequeue();
}
var name_list = ["Fiona", "Leon", "Jerry", "Susan", "Orianna", "Amumu"];
console.log("The winner is " + hotPotato(name_list,2));
輸出結果:
對於這個問題,使用隊列的結構很清晰。同樣的,我們仍然可以只用數組來模擬這個過程。
只需要進行一個取餘運算就可以完成循環遍歷隊列的問題
function hotPotatoUseArray(name_list, num) {
var current_index = 0;
var eliminated = "";
while(name_list.length > 1) {
current_index = (current_index +num) % name_list.length;
eliminated = name_list.splice(current_index, 1);
console.log("eliminated: " + eliminated);
}
return name_list[0];
}
var name_list = ["Fiona", "Leon", "Jerry", "Susan", "Orianna", "Amumu"];
console.log("The winner is " + hotPotatoUseArray(name_list, 2));
輸出結果與上面是一致的