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開発で使用される基本的な概念と技術の紹介

推薦する

HTML テーブル マークアップ チュートリアル (30): セルの暗い境界線の色属性 BORDERCOLORDARK

セルでは、暗い境界線の色を個別に定義できます。基本的な構文<TD ボーダーコロダーク=colo...

Mysqlはブール型の演算を設定します

Mysqlはブール型を設定します1. Tinyintタイプテストテーブルを作成し、blフィールドをブ...

MySQL スロークエリを通じて MySQL のパフォーマンスを最適化する方法

アクセス数が増えると、MySQL データベースへの負荷が増大します。MySQL アーキテクチャを使用...

FastApi+Vue+LayUIを使用してフロントエンドとバックエンドを分離するサンプルコード

目次序文プロジェクト設計後部フロントエンドプロジェクトを実行する質疑応答序文これまでの API 開発...

MySQL InnoDB ストレージ エンジンの詳細

序文MySQL では、InnoDB はストレージ エンジン レイヤーに属し、プラグインとしてデータベ...

MySQL の NULL 値に関する体験談と分析チュートリアルシリーズ

目次1. テストデータ2. ヌル値による不便3. スペース、空の値、null をどのように判断すれば...

JavaScript でよく使われる 3 つの Web エフェクトの詳細な説明

目次1要素オフセットシリーズ1.1 オフセットの概要1.2 オフセットとスタイルの違い視覚領域クライ...

標準的なHTMLの書き方は、Dreamweaverによって自動的に生成されるものとは異なります。

コードをコピーコードは次のとおりです。 <!--doctype はドキュメント タイプ htm...

clearfixとclearの例

この記事では、CSS を理解し始めたばかりの人を対象に、主に HTML で clearfix と c...

JS で CSS 変数を使用する方法

JS で CSS 変数を使用する方法:export キーワードを使用して、js オブジェクトを le...

JSはオンラインでのアナウンスのスクロール効果を実現します

この記事では、オンラインアナウンスのスクロール効果を実現するためのJSの具体的なコードを参考までに共...

Linux における $ 記号の基本的な使い方のまとめ

Linuxバージョン: CentOS 7 [root@azfdbdfsdf230lqdg1ba91 ...

Kylin 4.0.2 (Ubuntu) でブート パーティションを拡張するプロセスの紹介

目次序文1. 新しいパーティションを準備する2. ブートパーティションをコピーする3. fstabフ...

MySQL 操作: JSON データ型の操作

前回の記事では、MySQL データ保存手順パラメータの詳細な例を紹介しました。今日は、JSON デー...

MySQL水平および垂直テーブル変換操作の実装方法

この記事では、例を使用して、MySQL の水平テーブルと垂直テーブル間の変換操作を実装する方法を説明...