JavaScript 栈的详解及实例代码

发布时间 - 2026-01-10 22:44:22    点击率:

JavaScript 栈

栈是一种遵从先进后出(LIFO)原则的有序集合。

新添加或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。

在栈里,新元素都靠近栈顶,旧元素都接近栈底

昨天因为有点事没有更新,今天打算给大家讲讲JavaScript实现的数据结构

数据结构与算法是程序语言的灵魂,是解决一切编程问题的基础

以前学C/C++的时候,感觉算法还是非常重要的,但是前端涉及的并不多

不管怎样,作为技术人员,理解一些基本数据结构和算法应该是必须的

而且我们的JavaScript实现数据结构和算法更加容易

下面我们就先来看看其中一个最基本的

栈的理解

栈这种数据结构其实很好理解

可以把它想象成一个刚好能容下书大小的小箱子

推栈/压栈就是把一本书书放在箱子中,但是只能放在箱子的最上面

弹栈/出栈就是从箱子中拿出一本书

栈顶是箱子中最顶上的书

栈底是箱子中对低下的书

生活中栈的例子比比皆是,比如堆放盘子,子弹夹推子弹等等

这可以帮助我们更好的理解栈

栈也被用在我们编程语言的编译器和内存中保存变量、方法调用等等

栈的创建

那么现在我们来用JavaScript实现一个栈

首先我们需要考虑一种数据结构来保存栈元素,毫无疑问数组是合适的选择

然后我们要实现栈的功能,同样以装书为例

  1. 向栈顶中添加元素(向箱子了扔一本书)
  2. 移除栈顶元素(从箱子中取出一本书)
  3. 查看栈顶元素(看看箱子里最上面的书是什么)
  4. 判断栈是否为空(看看箱子里有没有书)
  5. 移除栈内全部元素(把箱子里的书全倒出来)
  6. 查看栈里元素个数(查看箱子里有几本书)

毫无疑问如果箱子里有很多书我们不能直接把箱子低下的书拿出来 所以我们不能直接操作栈底

也许我们有很多这样的箱子,有很多栈 ,所以我们最好把它声明为一个“类”,完整代码如下

function Stack() {
  var items = [];
  this.push = function (ele) {
    items.push(ele);
  };//推栈
  this.pop = function () {
    return items.pop();
  };//弹栈
  this.peek = function () {
    return items[items.length - 1];
  };//查看栈顶元素
  this.isEmpty = function () {
    return items.length === 0;
  };//判断栈是否为空
  this.size = function () {
    return items.length;
  };//栈大小
  this.clear = function () {
    items = [];
  };//清空栈
  this.print = function () {
    console.log(items.toString());
  };//打印栈
}
var stack = new Stack(); //声明栈的实例

栈的应用

下面我们就用栈解决一些问题

比如把十进制转化为二进制

要把十进制转化为二进制,可以把这个数字和2整除,直到0为止

比如把50转化为二进制就是10010

下面是算法实现

function convertBinary(decNum) {  //十进制转换为二进制
  var remStack = new Stack(),
    rem,
    binaryStr = '';
  while(decNum) {
    rem = Math.floor(decNum % 2);
    decNum = Math.floor(decNum / 2);
    remStack.push(rem);   //余数放到栈中
  }
  while(!remStack.isEmpty()) {
    binaryStr += remStack.pop();  //利用pop把栈内元素逐一弹出,将余数拼接成为一个字符串
  }
  return binaryStr;
}
console.log(convertBinary(50));//输出10010

还可以修改这个算法,让这个函数能够把十进制转化为任何进制

function baseConverter(decNum, base) { //十进制转换为任意进制    
  var base = (base >= 2 && base <= 16) ? base : 10,
    remStack = new Stack(),
    rem,
    baseStr = '',
    digits = '0123456789ABCDEF';
  while(decNum) {
    rem = Math.floor(decNum % base);
    decNum = Math.floor(decNum / base);
    remStack.push(rem);   //余数放到栈中
  }
  while(!remStack.isEmpty()) {
    baseStr += digits[remStack.pop()]; //利用pop把栈内元素逐一弹出,将余数拼接成为一个字符串
  }
  return baseStr;
}

其实用数组也可以实现,为了练习一下栈,就用栈来实现这个算法

通过这个小应用我们可以简单理解栈

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# JavaScript  #   # 栈详解及简单实例  # js  # JavaScript数组的栈方法与队列方法详解  # JavaScript调用堆栈及setTimeout使用方法深入剖析  # JavaScript实现显示函数调用堆栈的方法  # 详解JavaScript调用栈、尾递归和手动优化  # JavaScript中数据结构与算法(一):栈  # JavaScript把数组作为堆栈使用的方法  # JavaScript数据结构与算法之栈详解  # JS实现利用两个队列表示一个栈的方法  # JavaScript数据结构与算法之栈与队列  # JavaScript数据结构之栈实例用法  # JS栈stack类的实现与使用方法示例  # 数据结构  # 的书  # 转化为  # 箱子里  # 一本书  # 有很多  # 放在  # 把它  # 弹出  # 成为一个  # 就用  # 转换为  # 毫无疑问  # 移除  # 为空  # 很好  # 是一种  # 还可以  # 是从  # 我们可以 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何使用Service Container和依赖注入?(代码示例)  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  香港服务器租用每月最低只需15元?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  UC浏览器如何设置启动页 UC浏览器启动页设置方法  南京网站制作费用,南京远驱官方网站?  网站制作报价单模板图片,小松挖机官方网站报价?  如何用JavaScript实现文本编辑器_光标和选区怎么处理  大连网站制作公司哪家好一点,大连买房网站哪个好?  常州企业网站制作公司,全国继续教育网怎么登录?  制作企业网站建设方案,怎样建设一个公司网站?  JS中对数组元素进行增删改移的方法总结  如何快速搭建高效服务器建站系统?  如何快速打造个性化非模板自助建站?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Laravel如何实现用户密码重置功能?(完整流程代码)  ,网页ppt怎么弄成自己的ppt?  EditPlus中的正则表达式 实战(1)  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  Laravel如何实现文件上传和存储?(本地与S3配置)  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  js代码实现下拉菜单【推荐】  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  如何实现javascript表单验证_正则表达式有哪些实用技巧  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  canvas 画布在主流浏览器中的尺寸限制详细介绍  DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解  Java遍历集合的三种方式  Laravel如何实现API速率限制?(Rate Limiting教程)  Laravel如何配置和使用缓存?(Redis代码示例)  制作旅游网站html,怎样注册旅游网站?  Laravel Docker环境搭建教程_Laravel Sail使用指南  Linux网络带宽限制_tc配置实践解析【教程】  Laravel观察者模式如何使用_Laravel Model Observer配置  浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】  Laravel的.env文件有什么用_Laravel环境变量配置与管理详解  JS弹性运动实现方法分析  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何在万网自助建站平台快速创建网站?  如何在阿里云部署织梦网站?  JavaScript如何实现错误处理_try...catch如何捕获异常?  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?