js実装サイクルキュー
14073 ワード
1.基本キューの実装:基本キューの方法:1)キューの末尾に要素(enqueue)を追加する2)ヘッダーから要素(dequeue)を削除する3)キューヘッダ要素(front)を表示する4)キューが空(isEmpty)であるかどうかを表示する5)キューの長さ(size)を表示する6)キュー(print)を表示する
循環行列を使用してドラムを叩いて花を伝えるゲーム(ジョセフ環問題)をシミュレートすることができます.子供たちが輪になって、n個の数を伝えるたびに、止まったときに手に花を持っていた子供が淘汰され、チームに子供が1人しか残っていないまで、勝者になります.キューをループし、ループするたびに(キューヘッダから)1人の子供をポップアップし、この子をキューの末尾に追加し、n回ループし、ループが停止するとキューヘッダをポップアップ(淘汰)し、キューに1人の子供しか残っていないまで.
上記の問題ではキューは適用されませんが、原理はキューと同じ方法です.
または、
循環キュー参照リンク:https://www.cnblogs.com/dee0912/p/4960025.html
function Queue(){
//
var items=[];
//
this.enqueue=function(elem){
items.push(elem);
}
//
this.dequeue=function(){
return items.shift();
}
//
this.front=function(){
return items[0];
}
//
this.isEmpty=function(){
return items.length==0;
}
//
this.size=function(){
return items.length;
}
//
this.print=function(){
return items.toString();
}
}
循環行列を使用してドラムを叩いて花を伝えるゲーム(ジョセフ環問題)をシミュレートすることができます.子供たちが輪になって、n個の数を伝えるたびに、止まったときに手に花を持っていた子供が淘汰され、チームに子供が1人しか残っていないまで、勝者になります.キューをループし、ループするたびに(キューヘッダから)1人の子供をポップアップし、この子をキューの末尾に追加し、n回ループし、ループが停止するとキューヘッダをポップアップ(淘汰)し、キューに1人の子供しか残っていないまで.
function circularQueue(arr,n){
//
var queue=new Queue();
//
for(var i=0;i<arr.length;i++){
queue.enqueue(arr[i]);
}
1
while(queue.size()>1){
// n
for(var j=0;j<n-1;j++){
queue.enqueue(queue.dequeue());
}
// n
queue.dequeue();
}
//
return queue.dequeue();
}
上記の問題ではキューは適用されませんが、原理はキューと同じ方法です.
function circleQueue(arr,n){
if(arr.length>=m){
while(arr.length>=m){
arr=arr.slice(m).concat(arr.slice(0,m-1));
}
}
while(arr.length>1){
var i=m%arr.length;
arr=i>1?arr.slice(i).concat(arr.slice(0,i-1)):arr.slice(i);
}
console.log(arr[0]);
}
または、
function circleQueue(arr,n){
while(arr.length>1){
for(var i=0;i<n-1;i++){
arr.push(arr.shift());
}
arr.shift();
}
console.log(arr[0]);
}
循環キュー参照リンク:https://www.cnblogs.com/dee0912/p/4960025.html