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 相关文章推荐
js实现的跟随鼠标移动的时钟效果(中英文日期显示)
Jan 17 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
Jan 09 Javascript
js批量设置样式的三种方法不推荐使用with
Feb 25 Javascript
jQuery代码性能优化的10种方法
Jun 21 Javascript
JavaScript获取短信验证码(周期性)
Dec 29 Javascript
Vue组件之全局组件与局部组件的使用详解
Oct 09 Javascript
React Native使用Modal自定义分享界面的示例代码
Oct 31 Javascript
vue中的provide/inject的学习使用
May 09 Javascript
浅谈vue后台管理系统权限控制思考与实践
Dec 19 Javascript
iview实现select tree树形下拉框的示例代码
Dec 21 Javascript
这应该是最详细的响应式系统讲解了
Jul 22 Javascript
react组件基本用法示例小结
Apr 27 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的SQL注入过程分析
2012/01/06 PHP
php正则表达式使用的详细介绍
2013/04/27 PHP
PHP 转义使用详解
2013/07/15 PHP
解决ThinkPHP下使用上传插件Uploadify浏览器firefox报302错误的方法
2015/12/18 PHP
php实现图片上传时添加文字和图片水印技巧
2020/04/18 PHP
PHP实现负载均衡下的session共用功能
2018/04/17 PHP
for 循环性能比较 提高for循环的效率
2009/03/19 Javascript
Javascript 函数对象的多重身份
2009/06/28 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
js键盘上下左右键怎么触发function(实例讲解)
2013/12/14 Javascript
采用call方式实现js继承
2014/05/20 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
jQuery 实现侧边浮动导航菜单效果
2014/12/26 Javascript
浅谈javascript面向对象程序设计
2015/01/21 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
javascript基础知识分享之类与函数化
2016/02/13 Javascript
详解jquery validate实现表单验证 (正则表达式)
2017/01/18 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
AngularJS实现单一页面内设置跳转路由的方法
2017/06/28 Javascript
JS中appendChild追加子节点无效的解决方法
2018/10/14 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
解决IOS端微信H5页面软键盘弹起后页面下方留白的问题
2019/06/05 Javascript
Python实现将SQLite中的数据直接输出为CVS的方法示例
2017/07/13 Python
python学习基础之循环import及import过程
2018/04/22 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
Sephora丝芙兰印尼官方网站:购买化妆品和护肤品
2018/07/02 全球购物
暑期学习心得体会
2014/09/02 职场文书
个人思想政治总结
2015/03/05 职场文书
学术会议通知
2015/04/15 职场文书
假如给我三天光明读书笔记
2015/06/26 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
JS中如何优雅的使用async await详解
2021/10/05 Javascript
【D4DJ】美少女DJ企划 动画将于明年冬季开播第2季
2022/04/11 日漫