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 相关文章推荐
Firefox 无法获取cssRules 的解决办法
Oct 11 Javascript
JS模拟面向对象全解(二、类型与赋值)
Jul 13 Javascript
jQuery获取注册信息并提示实现代码
Apr 21 Javascript
解决js中window.open弹出的是上次的缓存页面问题
Dec 29 Javascript
jQuery中 delegate使用的问题
Jul 03 Javascript
jQuery 移动端拖拽(模块化开发,触摸事件,webpack)
Oct 28 Javascript
Angular2-primeNG文件上传模块FileUpload使用详解
Jan 14 Javascript
基于JavaScript实现滑动门效果
Mar 16 Javascript
JavaScript如何一次性展示几万条数据
Mar 30 Javascript
PHP 实现一种多文件上传的方法
Sep 20 Javascript
react结合bootstrap实现评论功能
May 30 Javascript
JS时间戳与日期格式互相转换的简单方法示例
Jan 30 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
ftp类(myftp.php)
2006/10/09 PHP
php checkbox 取值详细说明
2010/08/19 PHP
php操作mysqli(示例代码)
2013/10/28 PHP
学习php中的正则表达式
2014/08/17 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
2015/06/05 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
JS实现根据密码长度显示安全条功能
2017/03/08 Javascript
Bootstrap警告框(Alert)插件使用方法
2017/03/21 Javascript
js案例之鼠标跟随jquery版(实例讲解)
2017/07/21 jQuery
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
JS如何实现手机端输入验证码效果
2020/05/13 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
python实现RSA加密(解密)算法
2016/02/17 Python
详解python中requirements.txt的一切
2017/03/03 Python
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
Python2.7基于笛卡尔积算法实现N个数组的排列组合运算示例
2017/11/23 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
利用Anaconda简单安装scrapy框架的方法
2018/06/13 Python
python中计算一个列表中连续相同的元素个数方法
2018/06/29 Python
python如何获取当前文件夹下所有文件名详解
2019/01/25 Python
Python 虚拟空间的使用代码详解
2019/06/10 Python
python opencv将表格图片按照表格框线分割和识别
2019/10/30 Python
python 如何调用 dubbo 接口
2020/09/24 Python
让你相见恨晚的十个Python骚操作
2020/11/18 Python
HTML5是否真的可以取代Flash
2010/02/10 HTML / CSS
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
实习自我鉴定范文
2013/10/30 职场文书
传播学专业毕业生自荐信
2013/11/04 职场文书
开办化妆品公司创业计划书
2013/12/26 职场文书
学校做一个有道德的人活动方案
2014/08/23 职场文书