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实现面向对象类的功能书写技巧
Mar 07 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战二)
Aug 21 Javascript
可恶的ie8提示缺少id未定义
Mar 20 Javascript
JQuery实现超链接鼠标提示效果的方法
Jun 10 Javascript
详解JavaScript ES6中的模板字符串
Jul 28 Javascript
js HTML5 Ajax实现文件上传进度条功能
Feb 13 Javascript
JS三级可折叠菜单实现方法
Feb 29 Javascript
第一次接触神奇的Bootstrap
Oct 14 Javascript
vue.js指令v-for使用及索引获取
Nov 03 Javascript
Angular中实现树形结构视图实例代码
May 05 Javascript
Node.Js生成比特币地址代码解析
Apr 21 Javascript
Layui 设置select下拉框自动选中某项的方法
Aug 14 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正则校验用户名介绍
2008/07/19 PHP
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
PHP内存使用情况如何获取
2015/10/10 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
克隆javascript对象的三个方法小结
2011/01/12 Javascript
JS+DIV实现鼠标划过切换层效果的实例代码
2013/11/26 Javascript
jquery 隐藏与显示tr标签示例代码
2014/06/06 Javascript
javascript中函数作为参数调用的方法
2015/02/09 Javascript
简单讲解AngularJS的Routing路由的定义与使用
2016/03/05 Javascript
JS正则表达式修饰符中multiline(/m)用法分析
2016/12/27 Javascript
在HTML文档中嵌入JavaScript的四种方法
2018/05/07 Javascript
详解vue-cli@2.x项目迁移日志
2019/06/06 Javascript
vuex管理状态 刷新页面保持不被清空的解决方案
2019/11/11 Javascript
基于JavaScript实现猜数字游戏代码实例
2020/07/30 Javascript
jQuery实现动态向上滚动
2020/12/21 jQuery
Python 备份程序代码实现
2017/03/06 Python
python中文分词教程之前向最大正向匹配算法详解
2017/11/02 Python
python实现狄克斯特拉算法
2019/01/17 Python
利用python实现在微信群刷屏的方法
2019/02/21 Python
python集合是否可变总结
2019/06/20 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
2014/09/02 HTML / CSS
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
澳大利亚婴儿礼品公司:The Baby Gift Company
2018/11/04 全球购物
酒店司机岗位职责
2013/12/14 职场文书
销售简历自我评价
2014/01/24 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
买房协议书
2014/04/11 职场文书
小学生三分钟演讲稿
2014/08/18 职场文书
会计工作能力自我评价
2015/03/05 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
演讲稿之感恩老师(三篇范文)
2019/09/06 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python