ホームページ > 記事 > ウェブフロントエンド > JavaScript がスタック データ構造を実装する方法の詳細な例
スタック (スタックとも呼ばれます) は、限られた操作を備えた線形テーブルです。次の記事では、JavaScript を使用してスタックのデータ構造を実装する方法について、サンプル コードを通じて詳しく説明します。必要に応じて参照できます。以下を見てみましょう。
はじめに
この記事では主に JavaScript 実装スタックのデータ構造に関する関連内容を紹介します。これについては多くを語らず、詳細を見てみましょう。 :
スタック (英語: stack) は、コンピュータサイエンスでは、特別なシリアル データ構造です。その特徴は、シリアルまたは配列の一端 (先頭と呼ばれます) にのみ接続できることです。スタックのインジケーター、英語:top) は、データの追加 (プッシュ) とデータの出力 (ポップ) の操作を実行します。さらに、スタックは 1 次元配列または接続されたシーケンスの形式で実装することもできます。
スタックされたデータ構造は一方の端でのみ操作を許可するため、LIFO (Last In First Out) の原則に従って動作します。 – Wikipedia
上記は、Wikipedia によるスタックの解釈です。次に、JavaScript (ES6) コードを使用してスタック データ構造を実装します
Stack クラスを実装します
/** * Stack 类 */ class Stack { constructor() { this.data = []; // 对数据初始化 this.top = 0; // 初始化栈顶位置 } // 入栈方法 push() { const args = [...arguments]; args.forEach(arg => this.data[this.top++] = arg); return this.top; } // 出栈方法 pop() { if (this.top === 0) throw new Error('The stack is already empty!'); const peek = this.data[--this.top]; this.data = this.data.slice(0, -1); return peek; } // 返回栈顶元素 peek() { return this.data[this.top - 1]; } // 返回栈内元素个数 length() { return this.top; } // 清除栈内所有元素 clear() { this.top = 0; return this.data = []; } // 判断栈是否为空 isEmpty() { return this.top === 0; } } // 实例化 const stack = new Stack(); stack.push(1); stack.push(2, 3); console.log(stack.data); // [1, 2, 3] console.log(stack.peek()); // 3 console.log(stack.pop()); // 3, now data is [1, 2] stack.push(3); console.log(stack.length()); // 3 stack.clear(); // now data is []
スタックの概念を使用して、数値を 2 進数と 8 進数に変換します
/** * 将数字转换为二进制和八进制 */ const numConvert = (num, base) => { const stack = new Stack(); let converted = ''; while(num > 0) { stack.push(num % base); num = Math.floor(num / base); } while(stack.length() > 0) { converted += stack.pop(); } return +converted; } console.log(numConvert(10, 2)); // 1010
スタックの考え方を使用して、指定された文字列または数値が回文であるかどうかを判断します
/** * 判断给定字符串或者数字是否是回文 */ const isPalindrome = words => { const stack = new Stack(); let wordsCopy = ''; words = words.toString(); Array.prototype.forEach.call(words, word => stack.push(word)); while(stack.length() > 0) { wordsCopy += stack.pop(); } return words === wordsCopy; } console.log(isPalindrome('1a121a1')); // true console.log(isPalindrome(2121)); // false
上記は、JavaScriptを使用したスタックデータ構造の実装です。不適切ですが、これはデモ用のスタックの JS 実装です。
以上がJavaScript がスタック データ構造を実装する方法の詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。