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遍历input取得input的name
Apr 27 Javascript
小议javascript 设计模式 推荐
Oct 28 Javascript
JavaScript游戏之是男人就下100层代码打包
Nov 08 Javascript
基于jquery的3d效果实现代码
Mar 23 Javascript
JS定义回车事件(实现代码)
Jul 08 Javascript
jquery实现表单验证简单实例演示
Nov 23 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
Sep 19 jQuery
详谈vue+webpack解决css引用图片打包后找不到资源文件的问题
Mar 06 Javascript
Koa2微信公众号开发之消息管理
May 16 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
Feb 28 jQuery
javascript 使用sleep函数的常见方法详解
Apr 26 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
Oct 29 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
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
PHP类中Static方法效率测试代码
2010/10/17 PHP
php常用hash加密函数
2014/11/22 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
2016/08/17 PHP
PHP中ajax无刷新上传图片与图片下载功能
2017/02/21 PHP
基于PHP实现用户在线状态检测
2020/11/10 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
javascript模拟select,jselect的方法实现
2012/11/08 Javascript
使用jquery实现div的tab切换实例代码
2013/05/27 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
js判断是否为ie的方法小结
2014/01/13 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
javascript闭包功能与用法实例分析
2017/04/06 Javascript
原生javascript实现分页效果
2017/04/21 Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
2017/08/14 jQuery
Angular开发实践之服务端渲染
2018/03/29 Javascript
带你使用webpack快速构建web项目的方法
2020/11/12 Javascript
python3实现短网址和数字相互转换的方法
2015/04/28 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
django实现用户注册实例讲解
2019/10/30 Python
pycharm运行程序时看不到任何结果显示的解决
2020/02/21 Python
Django-migrate报错问题解决方案
2020/04/21 Python
解决python使用list()时总是报错的问题
2020/05/05 Python
GE设备配件:GE Appliance Parts(家电零件、配件和滤水器)
2018/11/28 全球购物
门卫岗位职责
2013/11/15 职场文书
24岁生日感言
2014/01/13 职场文书
展会邀请函范文
2014/01/26 职场文书
关爱残疾人标语
2014/06/25 职场文书
环卫处个人工作总结
2015/03/04 职场文书
2015年幼儿园德育工作总结
2015/05/25 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书