ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript がスタック データ構造を実装する方法の詳細な例

JavaScript がスタック データ構造を実装する方法の詳細な例

黄舟
黄舟オリジナル
2017-08-03 15:31:451261ブラウズ

スタック (スタックとも呼ばれます) は、限られた操作を備えた線形テーブルです。次の記事では、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 サイトの他の関連記事を参照してください。

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