1. スタック構造を理解する配列は一般的なデータ構造であり、配列内の任意の位置にデータを挿入したり削除したりできることはご存じのとおりです。ただし、特定の機能を実現するために、この任意性を制限しなければならない場合もあります。スタックとキューは、比較的一般的な制限付きデータ構造です。まずはスタックを見てみましょう。
構造図は以下のとおりです。 人生における積み重ねに似ている
次に、スタック構造のカプセル化を一緒に実装してみましょう。採用するメソッドは配列に基づいています。 2. スタック構造のカプセル化まず、スタック構造をカプセル化するクラスを次のように作成します。 関数 Stack(){ } その中にプロパティとメソッドを追加し、プロパティ メソッドを通じてクラスに配列を追加します。次に、プロトタイプ メソッドを使用して、よく使用される操作を追加します。 スタックに対する一般的な操作は次のとおりです。
次に、これらを 1 つずつ実装します。 関数 Stack(){ this.items = []; // スタックの先頭に新しい要素を追加します。押す() Stack.prototype.push = function(要素){ this.items.push(要素); } // スタックの一番上の要素を削除する pop() Stack.prototype.pop = function(){ this.items.pop() を返します。 } // スタックを変更せずにスタックの一番上の要素を返す peek() Stack.prototype.peek = 関数(){ this.items[this.items.length-1]を返します。 } // スタックが空かどうかを判定する isEmpty() Stack.prototype.isEmpty = 関数(){ (this.items.length == 0)の場合{ true を返します。 }それ以外 { false を返します。 } } // スタック内の要素数を返す size() Stack.prototype.size = function(){ this.items.length を返します。 } // スタック構造の内容を文字として返す toString() Stack.prototype.toString = 関数(){ var str = ''; for(var i =0;i<this.items.length;i++){ str += this.items[i] + ' '; } str を返します。 } }
最後に確認します。コードは次のとおりです。 var スタック = 新しい Stack(); スタックをプッシュします(1); スタックをプッシュします(2); スタックをプッシュします(3); スタックをプッシュします(4); スタックをプッシュします(5); console.log(スタック); console.log('削除されたスタックの一番上の要素は: '+stack.pop()); console.log('スタックの最上位要素は: '+stack.peek()); console.log('スタックは空ですか: '+stack.isEmpty()); console.log('スタック内の要素数は: ' + stack.size()); console.log('スタック構造の内容は次のとおりです:'); コンソールにログ出力します。 出力は次のようになります。 ビルドに成功しました。 3. 10進数を2進数に変換する10進数を2進数に変換するにはどうすればいいですか? 10 進数を 2 進数に変換するには、10 進数を 2 で割り、結果が 0 になるまで余りをスタックにプッシュし、最後にスタック内の要素を 1 つずつポップして最終結果を取得します。 次の図に示すように: 具体的なコードは次のとおりです。 関数 Stack(){ this.items = []; //スタックにプッシュする Stack.prototype.push = function(element){ this.items.push(要素); } //ポップアウト Stack.prototype.pop = function(){ this.items.pop() を返します。 } //スタックが空かどうかを判断します Stack.prototype.isEmpty = function(){ (this.items.length == 0)の場合{ true を返します。 }それ以外{ false を返します。 } } } 関数decToBin(decNumber){ var stack = 新しい Stack; while(decNumber>0){ // 剰余を取得してスタックに格納します。stack.push(decNumber%2); //新しい除数を取得します。decNumber = Math.floor(decNumber/2); } //スタックの一番上の要素を取得します。var str = ''; while(!stack.isEmpty()){ str += スタック.pop(); } str を返します。 } console.log('100 をバイナリに変換すると次のようになります: '+decToBin(100)); console.log('50 をバイナリに変換すると次のようになります: '+decToBin(50)); console.log('20 をバイナリに変換すると次のようになります: '+decToBin(20)); console.log('34 をバイナリに変換すると次のようになります: '+decToBin(34)); 出力は次のようになります。 以下もご興味があるかもしれません:
|
<<: 9999px に別れを告げる新しい CSS 画像置換テクニック (背景表示と画面外へのテキストの移動)
>>: HTML でテキスト ボックスのプロンプト機能を実装するさまざまな方法
目次序文事例: JD.com の虫眼鏡効果の模倣オフセットシリーズクライアントシリーズスクロールシリ...
docker リモート API を学習した学生であれば、ポート 2375 についてよくご存知だと思い...
Springboot プロジェクトを開始するには、次の 3 つの方法があります。 1. メインメソッ...
目次1. はじめに2. axiosインターセプターを使用してフロントエンドログを出力する1. はじめ...
目次序文&& 演算子|| 演算子|| 演算子の簡単なデモ章の目的ケース演習(json...
導入Redis を詳しく説明する必要はありません。インストールと設定を始めましょう。インストールソー...
1. Docker環境を準備する2. fastdfsイメージを検索する 3. イメージをプルするdo...
ハードウェア上の理由により、機械は標準時間にある程度追いつけない場合があり、その誤差は 1 か月で数...
ダイナミックレム1. まず、現在の長さの単位を紹介しましょうpx em Mの幅 / 漢字の幅 1em...
概要: MySQL は、トランザクションをサポートするためにさまざまなストレージ エンジンを提供しま...
目次1. ポーテナーの紹介2. Portainer アーキテクチャの概要3. Portainerのイ...
インストール時間を節約するために、公式の mysql docker イメージを使用して mysql ...
解決策はただ一つ、ソースを変更することです。 github からのソースは基本的にタイムアウトするの...
ブログの正式名称は「Web log」で、中国語で「ネットワークログ」を意味します。後にブログに短縮さ...
面接で「MySQL に 1,000 万件のレコードをすばやく挿入するにはどうすればよいか」という質問...