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编辑器和代码格式化
Apr 25 Javascript
jquery绑定原理 简单解析与实现代码分享
Sep 06 Javascript
js检验密码强度(低中高)附图
Jun 05 Javascript
基于jquery实现复选框全选,反选,全不选等功能
Oct 16 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
Apr 06 Javascript
JS Canvas定时器模拟动态加载动画
Sep 17 Javascript
简单谈谈Vue 模板各类数据绑定
Sep 25 Javascript
在百度搜索结果中去除掉一些网站的资料(通过js控制不让显示)
May 02 Javascript
js与jQuery实现的用户注册协议倒计时功能实例【三种方法】
Nov 09 jQuery
vue实现滑动到底部加载更多效果
Oct 27 Javascript
vue实现路由监听和参数监听
Oct 29 Javascript
html5以及jQuery实现本地图片上传前的预览代码实例讲解
Mar 01 jQuery
微信小程序自定义导航栏
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
一个用mysql_odbc和php写的serach数据库程序
2006/10/09 PHP
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
利用PHP将部分内容用星号替换
2020/04/21 PHP
在PHP中使用FastCGI解析漏洞及修复方案
2015/11/10 PHP
PHP生成图片缩略图类示例
2017/01/12 PHP
AJAX架构之Dojo篇
2007/04/10 Javascript
JQuery之拖拽插件实现代码
2011/04/14 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
JavaScript数据库TaffyDB用法实例分析
2015/07/27 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
JavaScript中如何使用cookie实现记住密码功能及cookie相关函数介绍
2016/11/10 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
详解VueJs前后端分离跨域问题
2017/05/24 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
Vue中使用webpack别名的方法实例详解
2018/06/19 Javascript
通过实例解析js简易模块加载器
2019/06/17 Javascript
Echarts地图添加引导线效果(labelLine)
2019/09/30 Javascript
Python编写电话薄实现增删改查功能
2016/05/07 Python
教你使用python画一朵花送女朋友
2018/03/29 Python
对Python中内置异常层次结构详解
2018/10/18 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
养殖人员的创业计划书范文
2013/12/26 职场文书
早餐连锁店计划书
2014/01/08 职场文书
协议书范本
2014/04/23 职场文书
主题实践活动总结
2014/05/08 职场文书
信息员培训方案
2014/06/12 职场文书
关于召开会议的通知
2015/04/15 职场文书
2015最新婚礼主持词
2015/06/30 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
如何使用flask将模型部署为服务
2021/05/13 Python