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读取xml
Nov 04 Javascript
一些常用的JavaScript函数(json)附详细说明
May 25 Javascript
jquery实现图片等比例缩放以及max-width在ie中不兼容解决
Mar 21 Javascript
JavaScript三元运算符的多种使用技巧
Apr 16 Javascript
js正则表达式惰性匹配和贪婪匹配用法分析
Dec 26 Javascript
jquery uploadify隐藏上传进度的实现方法
Feb 06 Javascript
微信小程序之picker日期和时间选择器
Feb 09 Javascript
jQuery中的on与bind绑定事件区别实例详解
Feb 28 Javascript
js中getBoundingClientRect的作用及兼容方案详解
Feb 01 Javascript
JQuery实现ajax请求的示例和注意事项
Dec 10 jQuery
JavaScript模板引擎原理与用法详解
Dec 24 Javascript
详解ES6 扩展运算符的使用与注意事项
Nov 12 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
php操作excel文件 基于phpexcel
2010/07/02 PHP
php curl 获取https请求的2种方法
2015/04/27 PHP
php实现简单的守护进程创建、开启与关闭操作
2019/08/13 PHP
filters.revealTrans.Transition使用方法小结
2010/08/19 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
基于jQuery的获得各种控件Value的方法
2010/11/19 Javascript
js关闭父窗口时关闭子窗口
2013/04/01 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
jQuery Pagination分页插件_动力节点Java学院整理
2017/07/17 jQuery
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
Vue使用高德地图搭建实时公交应用功能(地图 + 附近站点+线路详情 + 输入提示+换乘详情)
2018/05/16 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
2018/08/31 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
LayUI数据接口返回实体封装的例子
2019/09/12 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
解决python3 网络请求路径包含中文的问题
2018/05/10 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
浅谈django orm 优化
2018/08/18 Python
Python多线程原理与用法详解
2018/08/20 Python
Python面向对象之接口、抽象类与多态详解
2018/08/27 Python
python psutil监控进程实例
2019/12/17 Python
Python 程序员必须掌握的日志记录
2020/08/17 Python
使用anaconda安装pytorch的实现步骤
2020/09/03 Python
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
仓管员岗位责任制
2014/02/19 职场文书
代办委托书怎样写
2014/04/08 职场文书
党的群众路线教育实践活动批评与自我批评发言稿
2014/10/16 职场文书
社区六一儿童节活动总结
2015/02/11 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
2015年出纳年终工作总结
2015/05/14 职场文书
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL