JavaScript 实现栈数据结构及典型应用

作者:小括号时间:2026-10-22 06:39:31浏览:147

本文详解如何使用JavaScript ES6实现栈(Stack)数据结构,涵盖入栈、出栈、查看栈顶等核心操作。通过具体代码示例,演示如何利用栈的后进先出特性解决数字进制转换及字符串回文判断问题,为理解基础数据结构提供实践参考。

栈数据结构概述

前言

本文主要介绍基于JavaScript实现栈(Stack)数据结构的具体方法,旨在提供可供参考的学习资料。

栈(Stack)是计算机科学中一种特殊的线性数据结构。其核心特征在于仅允许在表的一端(称为栈顶,由top指针指示)进行数据的插入(push)和删除(pop)操作。栈可以通过一维数组或链表结构来实现。

由于栈的操作受限于一端,其运作遵循后进先出(LIFO, Last In First Out)原则。

上述定义源自维基百科。接下来,我们将使用JavaScript(ES6语法)代码来具体实现栈的数据结构。

JavaScript栈类实现

构建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 []

栈在进制转换中的应用

利用栈的后进先出特性,实现数字到二进制和八进制的转换逻辑。


/**
 * 将数字转换为二进制和八进制
 */
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中栈的基本实现方式。

总结

本文内容至此结束,希望能为读者的学习或工作提供帮助。如有任何疑问,欢迎留言交流,感谢支持。

作者最新文章