JS中数据结构之栈


Posted in Javascript onJanuary 01, 2019

栈是一种高效的数据结构,因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现。

栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元 素,必须先拿掉上面的元素。

栈的实现

用数组 dataStore 保存栈内元素,构造函数将其初始化为一个空数组。变量 top 记录 栈顶位置,被构造函数初始化为 0,表示栈顶对应数组的起始位置 0。如果有元素被压入 栈,该变量的值将随之变化。

function Stack() {
  this.dataStore = [];
  this.top = 0;
  this.push = push;
  this.pop = pop;
  this.peek = peek;
}

push() 方法:当向栈中压入一个新元素时,需要将其保存在数组中变量 top 所对应的位置,然后将 top 值加 1,让其指向数组中下一个空位置。

function push(element) {
  this.dataStore[this.top++] = element;
}

pop() 方法:与 push() 方法相反——它返回栈顶元素,同时将变量 top 的值减 1

function pop() {
  return this.dataStore[--this.top];
}

peek() 方法:返回数组的第 top-1 个位置的元素,即栈顶元素。如果对一个空栈调用 peek() 方法,结果为 undefined。这是因为栈是空的,栈顶没有任何 元素。

pop() 方法虽然可以访问栈顶的元素,但是调用该方法后,栈顶元素也从栈中被永久性地删除了。peek() 方法则只返回栈顶元素,而不删除它。

function peek() {
  return this.dataStore[this.top-1];
}

length() 方法:通过返回变量 top 值的方式返回栈 内的元素个数

function length() {
  return this.top;
}

clear()方法:将变量 top 的值设为 0,清空栈

function clear() {
  this.top = 0;
}

使用栈解决问题举例:判断一个字符串是否是回文

Javascript 相关文章推荐
JavaScript中常见陷阱小结
Apr 27 Javascript
js不能跳转到上一页面的问题解决方法
Mar 01 Javascript
JavaScript获取某年某月的最后一天附截图
Jun 23 Javascript
一个php+js实时显示时间问题
Oct 12 Javascript
解析JavaScript中的字符串类型与字符编码支持
Jun 24 Javascript
js实现可旋转的立方体模型
Oct 16 Javascript
bootstrap栅格系统示例代码分享
May 22 Javascript
React之PureComponent的使用作用
Jul 10 Javascript
微信小程序实现图片上传
May 23 Javascript
微信小程序与公众号卡券/会员打通的问题
Jul 25 Javascript
Node.js API详解之 assert模块用法实例分析
May 26 Javascript
vue2和vue3的v-if与v-for优先级对比学习
Oct 10 Javascript
微信小程序自定义导航栏
Dec 31 #Javascript
JavaScript ES6中的简写语法总结与使用技巧
Dec 30 #Javascript
JavaScript ES6箭头函数使用指南
Dec 30 #Javascript
JavaScript创建防篡改对象的方法分析
Dec 30 #Javascript
JavaScript事件对象深入详解
Dec 30 #Javascript
JavaScript继承的特性与实践应用深入详解
Dec 30 #Javascript
JavaScript函数的特性与应用实践深入详解
Dec 30 #Javascript
You might like
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
PHP编程求最大公约数与最小公倍数的方法示例
2017/05/29 PHP
jQuery中 noConflict() 方法使用
2013/04/25 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
jQuery 实现自动填充邮箱功能(带下拉提示)
2014/10/14 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
jQuery.prop() 使用详解
2015/07/19 Javascript
js图片轮播效果实现代码
2020/04/18 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
用原生js统计文本行数的简单示例
2016/08/19 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
详解AngularJS1.6版本中ui-router路由中/#!/的解决方法
2017/05/22 Javascript
前端主流框架vue学习笔记第一篇
2017/07/26 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
详解vue中axios的封装
2018/07/18 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
基于vue和react的spa进行按需加载的实现方法
2018/09/29 Javascript
Node对CommonJS的模块规范
2019/11/06 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
Django框架实现分页显示内容的方法详解
2019/05/10 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
Desigual英国官网:在线购买原创服装
2018/03/09 全球购物
内科护士实习自我鉴定
2013/10/17 职场文书
活动志愿者自荐信
2014/01/27 职场文书
培训主管岗位职责
2014/02/01 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
区域销售大会开幕词
2016/03/04 职场文书
旅游安全责任协议书
2016/03/22 职场文书
MySQL之高可用集群部署及故障切换实现
2021/04/22 MySQL
用python开发一款操作MySQL的小工具
2021/05/12 Python