Maison >interface Web >js tutoriel >Exemple détaillé de la façon dont JavaScript implémente la structure de données de la pile

Exemple détaillé de la façon dont JavaScript implémente la structure de données de la pile

黄舟
黄舟original
2017-08-03 15:31:451286parcourir

La pile, également connue sous le nom de pile, est une table linéaire avec des opérations limitées. L'article suivant vous présente principalement les informations pertinentes sur l'utilisation de JavaScript pour implémenter la structure de données de la pile. L'article le présente à travers un exemple de code. , les amis dans le besoin peuvent s'y référer. Jetons un coup d'œil ci-dessous.

Avant-propos

Cet article vous présente principalement le contenu pertinent sur la structure de données de la pile d'implémentation JavaScript et le partage pour votre référence et étudier. Pas grand chose à dire, jetons un œil à l'introduction détaillée :

Stack (anglais : stack), qui peut aussi être directement appelé pile, est une structure de données série spéciale en informatique. La particularité est que les opérations d'ajout de données (push) et de sortie de données (pop) ne sont autorisées qu'à une extrémité de la liste chaînée ou du tableau (appelé indicateur supérieur de pile, anglais : top). De plus, la pile peut également être implémentée sous la forme d'un tableau unidimensionnel ou d'une séquence connexe.

La structure de données empilée ne permettant les opérations qu'à une seule extrémité, elle fonctionne selon le principe LIFO (Last In First Out). – Wikipédia

Ce qui précède est l’interprétation de la pile par Wikipédia. Ensuite, nous utilisons du code JavaScript (ES6) pour implémenter la structure de données de la pile

Implémenter une classe 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 []

Utilisez l'idée de pile pour convertir des nombres en binaires et octaux


/**
 * 将数字转换为二进制和八进制
 */
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

Utilisez l'idée de pile pour déterminer si une chaîne ou un nombre donné est un palindrome


/**
 * 判断给定字符串或者数字是否是回文
 */
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

Ce qui précède est la structure de données de la pile utilisant l'implémentation JavaScript, certains algorithmes peuvent être inadéquats, mais il s'agit simplement de démontrer l'implémentation de la pile par JS

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn