Maison >interface Web >js tutoriel >Exemple détaillé de la façon dont JavaScript implémente la structure de données de la pile
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!