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を使用してダークモードとブライトモードを切り替える

推薦する

システムエラー 1067 を解決するための MySQL データベース グリーン バージョンのインストール チュートリアル

ソフトウェアのグリーンバージョンとインストールバージョンの違いは何ですか?通常、ファイルのインストー...

border-radiusは要素に丸い境界線を追加する方法です

border-radius:10px; /* すべての角は半径 10px で丸められます*/ bor...

組み込み Linux 開発環境で ping と nfs を構築するためのソリューション

1. 組み込みソフトウェアレベル 1) ブートローダ -> ブートローダ組み込みシステム全体の...

カンマで区切られたmysqlの分割関数の実装

1: 文字列を区切るためのストアドプロシージャを定義する 区切り文字 $$ `mess`$$ を使う...

Dockerレジストリイメージ同期の実装アイデア

はじめに以前は、Docker イメージは Azure のコンテナー レジストリに保存されていました。...

Windows での MySQL 8.0.16 のインストールと設定方法のグラフィック チュートリアル

この記事は、参考のためにMySQL 8.0.16のインストールグラフィックチュートリアルを記録してい...

Vue はタブ ラベルを実装します (ラベルが自動スクロールを超える)

作成されたタブラベルがページの表示領域を超えると、タブラベルの距離だけ自動的にスクロールされます。ま...

デザイン理論:計画、リソース、コミュニケーションの問題について

<br />多くの中小企業ではこの問題は発生しません。中小企業はデザイナーをサポートし、...

MySQL 8.0.16 winx64 のインストールと設定方法のグラフィックチュートリアル

最近、データベースについて学び始めました。最初にやったことは、データベースとは何か、データベースとデ...

Windows DNS サーバーに「ワームレベル」の脆弱性が露呈、17 年間存在

脆弱性の紹介SigRed の脆弱性はワーム化可能であるため非常に危険です。つまり、ユーザーの介入なし...

Linux システム修復モード (シングル ユーザー モード)

目次序文1. シングルユーザーモードでの一般的なバグ修正2. シングルユーザーモードでシステムパスワ...

Mysql5.7.18 のインストールとマスタースレーブレプリケーションの詳細なグラフィック説明

CentOS6.7にmysql5.7.18をインストールする 1. /usr/localディレクトリ...

仮想マシンを作成し、VMware に Redhat Linux オペレーティング システムをインストールする (グラフィック チュートリアル)

VMware で仮想マシンを作成し、Redhat Linux オペレーティング システムをインスト...

Linux での SELinux を理解する方法

目次1. SELinux の紹介2. SELinuxの基本概念2.1 仕事の種類2.2. セキュリテ...

javascript 入力画像のアップロードとプレビュー、FileReader プレビュー画像

FileReader は、フロントエンドのファイル処理、特に画像処理にとって重要な API です。画...