ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScipt_javascriptスキルにおけるスタックの実装方法
次のステップは、データ構造の最初の部分、スタックです。
Stack は、後入れ先出しの原則 (LIFO、正式名: Last In First Out) に従う順序付きコレクションです。スタックの最上位は常に最新の要素です。
例: スタックとは、箱の中に置かれた本の山のようなものです。下の本を取りたい場合は、最初に上の本を取り除かなければなりません。 (もちろん、下の本を先に手に取ってもダメです)
図を見ても分かります。
JavaScipt でのスタックの実装
まず、コンストラクターを作成します。
/** * 栈的构造函数 */ function Stack() { // 用数组来模拟栈 var item = []; }
スタックには次のメソッドが必要です:
プッシュメソッドの実装
説明: 新しい要素をスタックに追加する必要がありますが、要素の位置はキューの最後にあります。つまり、配列のプッシュ メソッドを使用して実装をシミュレートできます。
実装:
/** * 将元素送入栈,放置于数组的最后一位 * @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 でスタックを実装する方法を学ぶのに役立つことを願っています。