JavaScript 实现栈数据结构及典型应用
本文详解如何使用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中栈的基本实现方式。
总结
本文内容至此结束,希望能为读者的学习或工作提供帮助。如有任何疑问,欢迎留言交流,感谢支持。
JS语法错误会阻止加载吗?区分SyntaxError与资源加载失败
2026-11-05 16:08:46
JavaScript常见SyntaxError语法错误排查与修复方法
2026-11-05 13:58:44
JS中slice、substring和substr截取字符串的区别
2026-11-05 13:43:47
JS 转 TS 手动迁移最佳实践:从配置 tsconfig 到消除 any 类型
2026-11-05 11:53:32
为什么JS数组push后得到的是数字而不是数组?
2026-11-05 09:59:18
