JavaScriptは両端キューを実装する

JavaScriptは両端キューを実装する

この記事の例では、両端キューを実装するためのJavaScriptの具体的なコードを参考までに共有しています。具体的な内容は次のとおりです。

1. 両端キュー

deque は、フロントエンドとバックエンドの両方から同時に要素を追加および削除できる特別なキューです。

2. 両端キューの応用

チケットを買ったばかりの人が簡単な情報を聞きたいときは、列の先頭に戻ることができます。列の最後尾の人が急いでいる場合は、列を離れることができます。

3. 両端キュー方式

addFront(element): このメソッドは、両端キューの先頭に新しい要素を追加します。
addBack(element): このメソッドは、両端キューのバックエンドに新しい要素を追加します (実装方法は、Queue クラスの enqueue メソッドと同じです)。
removeFront(): このメソッドは、両端キューの先頭から最初の要素を削除します。
removeBack(): このメソッドは、両端キューの後ろから最初の要素を削除します。
peekFront(): このメソッドは、両端キューの最初の要素を返します。
peekBack(): このメソッドは、両端キューの後ろの端にある最初の要素を返します。

4. 実装

クラスDeque{
           コンストラクタ(){
               this.items = {};
               カウント = 0;
               this.lowestCount = 0; 
           }

        // 両端キューの先頭に新しい要素を追加します。addFront(element){
            if(this.isEmpty()){
                this.addBack(要素);
            }
            そうでない場合(this.lowestCount > 0){
                this.lowestCount --;
                this.items[this.lowestCount] = 要素;
            }
            それ以外{
                for(let i=this.count;i>0;i--){
                    this.items[i] = this.items[i-1]; 
                }
                this.lowestCount = 0;
                this.items[this.lowestCount] = 要素;
                this.count++;
            }
        };
        addBack(要素){
            this.count++;
            this.items[this.count-1] = 要素;
        };
        前面を削除します(){
            if(this.isEmpty()){
                未定義を返します。
            }
            定数結果 = this.items[this.lowestCount];
            this.items[this.lowestCount]を削除します。
            this.lowestCount++;
            結果を返します。
        };
        削除(){
            if(this.isEmpty()){
                未定義を返します。
            }
            定数結果 = this.items[this.count-1];
            this.items[this.count-1]を削除します。
            this.count--;
            結果を返します。
        };
        ピークフロント(){
            if(this.isEmpty()){
                null を返します。
            }
          this.items[this.lowestCount]を返します。
        };
        ピークバック(){
            if(this.isEmpty()){
                null を返します。
            }
            this.items[this.count-1]を返します。
        };
        空です(){
            this.count を返します - this.lowestCount == 0;
        }
        サイズ(){
            this.count - this.lowestCount を返します。
        }
        文字列(){
            if(this.isEmpty()){
                戻る '';
            }
            objString = `${this.items[this.lowestCount]}` とします。
            (var i=this.lowestCount+1;i<this.count;i++){
                objString = `${objString},${this.items[i]}`;
            }
            objString を返します。
        }
        クリア(){
            this.items={};
            カウント = 0;
            this.lowestCount = 0;
        }
   

       }

       const deque = 新しい Deque();
       deque.addFront('John');
       deque.addFront('Jack');
       deque.addFront('エイミー');
       deque.addBack('Lisa');
    // deque.removeFront();
    // deque.removeBack();
    console.log(deque.size());
    コンソールにログ出力します。
    コンソールにログ出力します。
    コンソールにログ出力します。
       console.log(deque.clear());
       コンソールにログ出力します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • JS でのキューと両端キューの詳細な実装と適用
  • jsでイベントキュー操作関数を書く
  • JavaScript配列のスタックメソッドとキューメソッドの詳しい説明
  • キューとスタックメソッドのJS実装
  • JavaScript キュー関数と非同期実行の詳細な説明
  • JS アルゴリズムとデータ構造におけるキューの例の詳細な説明
  • キュー先入先出関数の JS 実装例
  • JavaScript で配列を使用して実装された循環キュー コード
  • JavaScript キュー、優先キュー、循環キュー
  • JSは2つのキューを使ってスタックを表現する方法を実装している

<<:  ウェブページを作成するために最もよく使用されるHTMLタグ

>>:  CSSを使用してダークモードとブライトモードを切り替える

推薦する

mysql8.x docker リモートアクセスの詳細な設定

目次環境条件エラーが発生しました回避策1. mysql dockerにログインする2. ルートパスワ...

外部キー制約を持つテーブルデータを削除する MySQL メソッドの紹介

MySQLでテーブルやデータを削除する場合、 [エラー] 1451 - 親行を削除または更新できませ...

床スクロール効果を実現する js

この記事ではjQueryを使用して、階段のスライド効果を実装し、フロアをスクロールし、フロアボタンを...

JavaScriptの動作メカニズムの詳細な説明とイベントループについての簡単な説明

目次1. JavaScript がシングルスレッドなのはなぜですか? 2. タスクキュー3. イベン...

MySql8.0 のトランザクション分離レベルエラーの問題を解決する

目次MySql8.0 トランザクション分離レベルエラーの表示質問コマンドは次のように変更されますMy...

Zabbix が MySQL のマスター/スレーブ状態を監視する方法の詳細な説明

MySQLマスタースレーブを設定した後、スレーブの状態が正常かどうかわからないことが多く、例外が発生...

ハイパーコネクションの4つの状態の適用の詳細な説明

ブラウザの問題かもしれないと思うかもしれませんが、スタイル定義の順序が間違っている可能性が高いです。...

Maven で tomcat8-maven-plugin プラグインを使用する詳細なチュートリアル

オンラインで多くの記事を検索しましたが、解決策は見つかりませんでした。次のように、tomcat7-m...

JavaScript 構造化代入の詳細な説明

目次コンセプト配列の分割値を個別に宣言して割り当てるデフォルト値の構造化解除変数値の交換関数によって...

Nginx シグナル制御

Nginx の紹介Nginx は、高性能な HTTP およびリバース プロキシ サーバーであり、IM...

CSS で 3 列レイアウトを実装するいくつかの方法と利点と欠点

序文3 列レイアウトは、その名前が示すように、両側が固定され、中央が適応します。実際の開発では、3 ...

CSS を使用して fullpage.js のフルスクリーン スクロール効果を実装するサンプル コード

最近 CSS を勉強していたとき、 2 つの CSS プロパティだけを使用して全画面スクロール効果を...

Linux/Mac に MySQL をインストールするときにパスワードを忘れた場合の解決策

序文この記事では主に、Linux/Mac に MySQL をインストールするときにパスワードを忘れた...

テキストエリア テキストエリアの幅と高さ 幅と高さの自動適応実装コード

コードをコピーコードは次のとおりです。 <HTML> <ヘッド> <T...