ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript 優先キューと循環キューの例の詳細な説明

JavaScript 優先キューと循環キューの例の詳細な説明

小云云
小云云オリジナル
2018-01-20 10:21:301591ブラウズ

この記事では主にJavaScriptデータ構造の優先キューと循環キューを紹介し、JavaScriptデータ構造の優先キューと循環キューの原理、定義、使用法を例の形式で詳細に分析します。 . 皆さんのお役に立てれば幸いです。

Priority Queue

プライオリティキューを実装します。プライオリティを設定し、正しい位置に要素を追加します。

ここで実装するのは最小優先度キューであり、優先度の値が小さい(優先度が高い)要素がキューの先頭に配置されます。

//创建一个类来表示优先队列
function Priorityqueue(){
  var items=[];//保存队列里的元素
  function QueueEle(e,p){//元素节点,有两个属性
    this.element=e;//值
    this.priority=p;//优先级
  }
  this.enqueue=function(e,p){//添加一个元素到队列尾部
    var queueEle=new QueueEle(e,p);
    var added=false;
    //priority小的优先级高,优先级高的在队头
    if(this.isEmpty()){
      items.push(queueEle);
    }else{
      for(var i=0;i<items.length;i++){
        if(items[i].priority>queueEle.priority){
          items.splice(i,0,queueEle);
          added=true;
          break;
        }
      }
      if(!added){
        items.push(queueEle);
      }
    }
  }
  this.isEmpty=function(){
    return items.length==0;
  }
  this.dequeue=function(){
    return items.shift();
  }
  this.clear=function(){
    items=[];
  }
  this.print=function(){
    console.log(items);
  }
  this.mylength=function(){
    return items.length;
  }
}
var pqueue=new Priorityqueue();
pqueue.enqueue('a',2);
pqueue.enqueue('b',1);
pqueue.enqueue('c',2);
pqueue.enqueue('d',2);
pqueue.enqueue('e',1);
pqueue.print();
//[ QueueEle { element: 'b', priority: 1 },
// QueueEle { element: 'e', priority: 1 },
// QueueEle { element: 'a', priority: 2 },
// QueueEle { element: 'c', priority: 2 },
// QueueEle { element: 'd', priority: 2 } ]

実行結果:

正しい位置に要素を追加: キューが空の場合は、要素を直接キューに追加できます。それ以外の場合は、この要素の優先順位を他の要素と比較する必要があります。追加する要素よりも優先度の低い項目が見つかった場合、新しい要素がその前に挿入されます。このようにして、同じ優先度を持つが最初にキューに追加された他の要素についても、先入れに従います。先出し原則。

最大優先順位キュー: 優先順位の値が大きい要素がキューの先頭に配置されます。

循環キュー

は、太鼓と花渡しゲームを実装します。

//创建一个类来表示队列
function Queue(){
  var items=[];//保存队列里的元素
  this.enqueue=function(e){//添加一个元素到队列尾部
    items.push(e);
  }
  this.dequeue=function(){//移除队列的第一项,并返回
    return items.shift();
  }
  this.front=function(){//返回队列的第一项
    return items[0];
  }
  this.isEmpty=function(){//如果队列中部包含任何元素,返回true,否则返回false
    return items.length==0;
  }
  this.mylength=function(){//返回队列包含的元素个数
    return items.length;
  }
  this.clear=function(){//清除队列中的元素
    items=[];
  }
  this.print=function(){//打印队列中的元素
    console.log(items);
  }
}
//击鼓传花
function hotPotato(namelist,num){
  var queue=new Queue();
  for(var i=0;i<namelist.length;i++){
    queue.enqueue(namelist[i]);
  }
  var eliminated=&#39;&#39;;
  while(queue.mylength()>1){
    for(i=0;i<num;i++){
      queue.enqueue(queue.dequeue());
    }
    eliminated=queue.dequeue();
    console.log("淘汰"+eliminated);
  }
  return queue.dequeue();
}
var namelist=['a','b','c','d','e'];
var winner=hotPotato(namelist,7);
console.log(winner+"获胜");
//淘汰c
//淘汰b
//淘汰e
//淘汰d
//a获胜

操作結果:

リストを取得し、そのリストに含まれるすべての名前をキューに追加します。数値を指定すると、キューが反復処理されます。キューの先頭からアイテムを削除し、それをキューの末尾に追加して、循環キューをシミュレートします。パスの数が一定の数に達すると、花を手に入れた人が脱落します。最後に一人だけ残ったとき、彼が勝者です。

関連する推奨事項:

JDKでの優先キューの実装方法の詳細な説明

PHPデータ構造キュー(SplQueue)と優先キュー(SplPriorityQueue)の簡単な使用例_PHPチュートリアル

JavaScriptの配列を使用して実装

🎜🎜 code_javascript スキル🎜🎜

以上がJavaScript 優先キューと循環キューの例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。