ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScipt_javascriptスキルにおけるスタックの実装方法

JavaScipt_javascriptスキルにおけるスタックの実装方法

WBOY
WBOYオリジナル
2016-05-16 15:15:09911ブラウズ

次のステップは、データ構造の最初の部分、スタックです。
Stack は、後入れ先出しの原則 (LIFO、正式名: Last In First Out) に従う順序付きコレクションです。スタックの最上位は常に最新の要素です。
例: スタックとは、箱の中に置かれた本の山のようなものです。下の本を取りたい場合は、最初に上の本を取り除かなければなりません。 (もちろん、下の本を先に手に取ってもダメです)
図を見ても分かります。

JavaScipt でのスタックの実装
まず、コンストラクターを作成します。

/**
 * 栈的构造函数
 */
function Stack() {

 // 用数组来模拟栈
 var item = [];
}

スタックには次のメソッドが必要です:

  • push(element(s)): スタックの先頭に複数の要素を追加します
  • pop(): スタックの最上位要素を削除して返します
  • peek(): スタックの最上位要素を返します
  • isAmpty: スタックが空かどうかを確認し、空の場合は true を返します
  • clear: スタックからすべての要素を削除します
  • size: スタック内の要素の数を返します。
  • print: スタック内のすべての内容を文字列として表示します

プッシュメソッドの実装
説明: 新しい要素をスタックに追加する必要がありますが、要素の位置はキューの最後にあります。つまり、配列のプッシュ メソッドを使用して実装をシミュレートできます。
実装:

/**
 * 将元素送入栈,放置于数组的最后一位
 * @param {Any} element 接受的元素,不限制类型
 */
this.push = function(element) {
 items.push(element);
};

pop メソッドの実装
説明: スタックの最上位要素をポップし、同時にポップされた値を返す必要があります。配列の Pop メソッドを使用して実装をシミュレートできます。
実装:

/**
 * 弹出栈顶元素
 * @return {Any} 返回被弹出的值
 */
this.pop = function() {
 return items.pop();
};

peek メソッドの実装
注: スタックの最上位要素を表示するには、配列の長さを使用します。
実装:

/**
 * 查看栈顶元素
 * @return {Any} 返回栈顶元素
 */
this.peek = function() {
 return items[items.length - 1];
}

その他のメソッドの実装
注: 最初の 3 つはスタック メソッドの中核であり、残りのメソッドはここに一度にリストされています。以下で説明するキューがこの部分と大きく重なるためです。
実装:

/**
 * 确定栈是否为空
 * @return {Boolean} 若栈为空则返回true,不为空则返回false
 */
this.isAmpty = function() {
 return items.length === 0
};

/**
 * 清空栈中所有内容
 */
this.clear = function() {
 items = [];
};

/**
 * 返回栈的长度
 * @return {Number} 栈的长度
 */
this.size = function() {
 return items.length;
};

/**
 * 以字符串显示栈中所有内容
 */
this.print = function() {
 console.log(items.toString());
};

実際の応用
スタックの実際的な応用例がたくさんあります。この本には 10 進数を 2 進数に変換する関数があります。 (バイナリの計算方法がわからない場合は、Baidu を使用できます。) 以下は関数のソース コードです。
原則は、変換する数値を入力し、連続的に 2 で割って四捨五入することです。最後に while ループを使用して、スタック内のすべての数値を出力用の文字列に連結します。

/**
 * 将10进制数字转为2进制数字
 * @param {Number} decNumber 要转换的10进制数字
 * @return {Number}      转换后的2进制数字
 */
function divideBy2(decNumber) {

 var remStack = new Stack(),
  rem,
  binaryString = '';

 while (decNumber > 0) {
  rem = Math.floor(decNumber % 2);
  remStack.push(rem);
  decNumber = Math.floor(decNumber / 2);
 }

 while (!remStack.isAmpty()) {
  binaryString += remStack.pop().toString();
 }

 return binaryString;
};

この時点で、スタックの学習は終了しました。JavaScript でスタックを実装する方法を学ぶのに役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。