JavaScriptはキュー構造プロセスを実現する

JavaScriptはキュー構造プロセスを実現する

1. キューを理解する

前回のブログでは、制限されたデータ構造であるスタックについて説明しました。今度は、 Queueについて見てみましょう。

  • これは、 first in first out ( FIFO )、つまり先入れ先出しの制限付き線形リストです。
  • テーブルの先頭部分でのみ削除操作が許可されるという制限があります。
  • 挿入操作はテーブルのrearで実行されます。

その構造図は次のように表すことができます。

人生における行列に似たもの: たとえば、何かを買うために列に並ぶとき、先着順になります。

2. カプセル化キュー

キュー構造も配列形式で実装されています。まずはクラスを作成します。

 関数キュー(){
            
        }

その中にプロパティとメソッドを追加し、プロパティ メソッドを通じてクラスに配列を追加します。次に、プロトタイプ メソッドを使用して、よく使用される操作を追加します。

キューに対する一般的な操作は次のとおりです。

  • enqueue (要素): キューの末尾に 1 つ以上の新しい項目を追加します。
  • dequeue() : キューの最初の項目を削除し、削除された要素を返します。
  • front() : キューの最初の要素を返します。つまり、最初に追加される要素と最初に削除される要素です。
  • isEmpty() : キューに要素が含まれていない場合は true を返し、そうでない場合は false を返します。
  • size() : キュー内の要素数を返します
  • toString() : キューの内容を文字列に変換する

では、それを実装してみましょう。

関数キュー(){
     this.items = [];
     // キューの最後に 1 つ以上の新しい項目を追加します enqueue()
     Queue.prototype.enqueue = function(要素){
         this.items.push(要素);
     }
     //キューの最初の項目(つまりキューの先頭の項目)を削除します。dequeue()
     Queue.prototype.dequeue = 関数(){
          this.items.shift() を返します。
      }
     //キューの最初の要素を返す front()
     Queue.prototype.front = 関数() {
          this.items[0]を返します。
      }
     // スタックが空かどうかをチェックする isEmpty()
     Queue.prototype.isEmpty = 関数(){
         this.items.length == 0 を返します。
     }
     //キューに含まれる要素の数を返すsize()
     Queue.prototype.size = 関数(){
         this.items.length を返します。
     }
     //キューの内容を文字列形式に変換する toString()
     Queue.prototype.toString = 関数(){
         var str = '';
         for(var i =0;i<this.items.length;i++){
             str += this.items[i] + ' ';
         }
         str を返します。
     }
 }   

上記はキューのカプセル化です。次にそれを検証します。

 var キュー = 新しいキュー();
 キュー。エンキュー(10);
 キュー。エンキュー(20);
 キュー。エンキュー(30);
 キュー。エンキュー(40);
 キュー。エンキュー(50);
 console.log(キュー);
 console.log('削除された最初の項目は: ' + queue.dequeue());
 console.log('キューの最初の要素は: ' + queue.front());
 console.log('スタックは空ですか: '+queue.isEmpty());
 console.log('スタック構造の内容は次のとおりです:');
 コンソールにログ出力します。

出力は次のようになります。

ビルドに成功しました。

太鼓を叩きながらプレゼントを渡すケースを見てみましょう!

3. 太鼓をたたいて花を渡す場合

オリジナルのゲームルール:

  • クラスでゲームをします。生徒全員が輪になって立ち、花束を次の生徒に渡します。
  • このとき、男の人が太鼓を叩いています。太鼓が止まると、花を持っている人は罰せられます。

ゲームのルールを変更します:

  • 数人の友達が一緒にゲームをします。彼らは輪になって座り、数を数え始めます。特定の数まで数えた人は自動的に脱落します。
  • 最後に残った人が勝ちます。最後に残った人が勝つのはどのポジションでしょうか?

キューベースの関数をカプセル化します。

  • パラメータ:参加者全員の名前、
  • 結果:最後に残った人の名前

コードは次のとおりです。

 // キュー関数をカプセル化する Queue(){
     this.items = [];
     //最後に要素を追加します Queue.prototype.enqueue = function(element){
         this.items.push(要素);
     }
     //最初の要素を削除します Queue.prototype.dequeue = function(){
         this.items.shift() を返します。
     }
     //最初の要素を返す Queue.prototype.front = function(){
         this.items[0]を返します。
     }
     //キューに含まれる要素の数を返す Queue.prototype.size = function(){
         this.items.length を返します。
     }
 }
 
 関数 passGame(nameList,num){
     // キューを作成します var queue = new Queue();
     //すべての人をキューに追加します for(var i = 0;i<nameList.length;i++){
         キューにエントリを追加します。(nameList[i]);
     }
     //ゲームをプレイする while (queue.size() > 1) {
         //num より前の人がキューの最後に追加されます for(var i =1;i<num;i++){
             キューをエンキューします(キューをデキューします)。
         }
       // num 番号の人は queue.dequeue() から直接削除されます。
    }
    //勝者情報を取得します var endName = queue.front();
    console.log('残りの人数は:' + endName);
    nameList.indexOf(endName) を返します。
 }
 
 //テスト var nameList = ['a','b','c','d','e'];
 var g = passGame(nameList,5);
 console.log('この人の所在地は: '+g);

出力は次のようになります。

JavaScript でキュー構造を実装するプロセスに関するこの記事はこれで終わりです。JavaScript でキュー構造を実装することに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後も 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JavaScript キュー構造 キュー実装プロセス分析
  • JavaScript に基づくデータ構造キューアニメーションの分析例
  • JS アルゴリズムとデータ構造におけるキューの例の詳細な説明
  • JavaScript のデータ構造とアルゴリズム キューの原理と使用例の詳細な説明
  • JavaScript のデータ構造とアルゴリズム (パート 2): キュー
  • JavaScript のデータ構造とアルゴリズムのスタックとキュー

<<:  良いリファクタリングを行うには、コードをリファクタリングするだけでなく、人生をリファクタリングすることも重要です。

>>:  Web開発で使用される基本的な概念と技術の紹介

推薦する

jQuery はパーセンテージスコアリングの進捗バーを実装します

この記事では、パーセンテージスコアリングプログレスバーを実現するためのjQueryの具体的なコードを...

MySQL 起動時に「サーバーは PID ファイルを更新せずに終了しました」というエラーが報告される理由の詳細な分析

多くの人が MySQL の起動時にこのエラーに遭遇しています。まず、このエラーの前提は、サービス ス...

テキスト ファイルの並べ替えに役立つ Awk コマンドラインまたはスクリプト (推奨)

Awk は、ソートを含む他の一般的なユーティリティによって実行できるいくつかのタスクを実行できる強...

HTMLは実際にはいくつかの重要なタグを学ぶアプリケーションです

「これは革命になるだろう」という記事が出たあと。業界の皆様に認知され、もちろん内外からの評価もいただ...

Docker での Redis の永続ストレージの詳細な説明

この章では、dockerの下にあるSpring BootプロジェクトでRedisを操作し始めます。準...

Linux でリモート サーバー ファイルの状態を表示する方法

以下のように表示されます。 test コマンドはファイルが存在するかどうかを判断します。 ssh u...

オブジェクトのプロパティを反復処理する際の TypeScript の問題

目次1. 問題2. 解決策1. オブジェクトをanyとして宣言する2. オブジェクトのインターフェー...

Linuxで大きなファイルを素早くコピーする方法

データをコピーリモートでデータをコピーする場合、通常は rsync コマンドを使用しますが、小さなフ...

MySQL 5.7 解凍版のインストール、アンインストール、および文字化けしたコードの問題のグラフィック解決

1. 解凍版のインストール(1)圧縮パッケージをダウンロードし、ディスクの場所に解凍します。圧縮パッ...

ウェブページレイアウトデザインのシンプルな原則

この記事では、Web ページ レイアウト デザインのいくつかの簡単な原則をまとめ、Web ページ デ...

Dockerで複数のSpringbootを実行するための詳細なチュートリアル

Dockerは複数のSpringbootを実行する1番目: ポートマッピング 2番目: メモリサイズ...

乱数、文字列、日付、検証コード、UUIDを生成するMySQLメソッド

目次乱数を生成する0から1までの乱数を生成する指定された範囲内で乱数を生成します6桁のモバイル認証コ...

MySQL における between の境界と範囲の説明

境界範囲間のmysql間の範囲は両側の境界値を含む例: 3 から 7 までの id は、id >...

Ubuntu でディスク容量不足により MySQL が起動しない場合の解決策

序文最近、データベースのテーブルに 2 つのフィールドを追加しました。その後、ディスク容量不足のよう...

TCP 3 回目のハンドシェイク データ転送プロセス図

RFC793 ドキュメントの SYN フラグを持つプロセス パケットはデータを伝送できません。つま...