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 相关文章推荐
你可能不再需要JQUERY
Mar 09 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
Dec 13 Javascript
开发中可能会用到的jQuery小技巧
Mar 07 Javascript
js中对函数设置默认参数值的3种方法
Oct 23 Javascript
Web前端开发工具——bower依赖包管理工具
Mar 29 Javascript
JavaScript数组方法总结分析
May 06 Javascript
bootstrap组件之按钮式下拉菜单小结
Jan 19 Javascript
vue 粒子特效的示例代码
Sep 19 Javascript
详解JS函数stack size计算方法
Jun 18 Javascript
Node.js API详解之 console模块用法详解
May 12 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
Aug 31 Javascript
JavaScript 实现页面滚动动画
Apr 24 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的配置文件php.ini
2006/10/09 PHP
php访问数组最后一个元素的函数end()用法
2015/03/18 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
jQuery JSON的解析方式分享
2011/04/05 Javascript
JS简单的轮播的图片滚动实例
2013/06/17 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
一个支付页面DEMO附截图
2014/07/22 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
浅谈jQuery中height与width
2015/07/06 Javascript
基于JavaScript实现生成名片、链接等二维码
2015/09/20 Javascript
jQuery qrcode生成二维码的方法
2016/04/03 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
解决antd 下拉框 input [defaultValue] 的值的问题
2020/10/31 Javascript
Python和GO语言实现的消息摘要算法示例
2015/03/10 Python
Python中的super用法详解
2015/05/28 Python
Python 操作文件的基本方法总结
2017/08/10 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
pandas DataFrame 删除重复的行的实现方法
2019/01/29 Python
python实现统计文本中单词出现的频率详解
2019/05/20 Python
python 字符串常用方法汇总详解
2019/09/16 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
2020/03/08 Python
Python计算指定日期是今年的第几天(三种方法)
2020/03/26 Python
HTML5之SVG 2D入门2—图形绘制(基本形状)介绍及使用
2013/01/30 HTML / CSS
HTML5拖放效果的实现代码
2016/11/17 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
IWOOT美国:新奇的小玩意
2018/04/27 全球购物
护理自荐信范文
2013/10/05 职场文书
外贸专业求职信
2014/03/09 职场文书
村级个人对照检查材料
2014/08/22 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
医德医风个人工作总结2014
2014/11/14 职场文书
Python Django模型详解
2021/10/05 Python