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的图片懒加载js
Jun 30 Javascript
setinterval()与clearInterval()JS函数的调用方法
Jan 21 Javascript
JavaScript中的对象与JSON
Jul 03 Javascript
使用Script元素发送JSONP请求的方法
Jun 12 Javascript
老生常谈JavaScript中的this关键字
Oct 01 Javascript
微信小程序动态显示项目倒计时效果
Jun 13 Javascript
JavaScript判断日期时间差的实例代码
Mar 01 Javascript
vue router 配置路由的方法
Jul 26 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
Jul 13 Javascript
详解mpvue实现对苹果X安全区域的适配
Jul 31 Javascript
vue实现移动端拖动排序
Aug 21 Javascript
javascript自定义加载loading效果
Sep 15 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
一个简单的MySQL数据浏览器
2006/10/09 PHP
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
php include类文件超时问题处理
2015/02/06 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
PHP的反射机制实例详解
2017/03/29 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
学习ExtJS 访问容器对象
2009/10/07 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
JavaScript将页面表格导出为Excel的具体实现
2013/12/27 Javascript
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
JS获取各种宽度、高度的简单介绍
2014/12/19 Javascript
使用 TypeScript 重新编写的 JavaScript 坦克大战游戏代码
2015/04/07 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
关于TypeScript中import JSON的正确姿势详解
2017/07/25 Javascript
前端必备插件之纯原生JS的瀑布流插件Macy.js
2017/11/22 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
2019/05/16 Javascript
微信小程序实现抖音播放效果的实例代码
2020/04/11 Javascript
JavaScript实现页面高亮操作提示和蒙板
2021/01/04 Javascript
Python程序中使用SQLAlchemy时出现乱码的解决方案
2015/04/24 Python
Python实现全角半角字符互转的方法
2016/11/28 Python
Python3.7 新特性之dataclass装饰器
2019/05/27 Python
Python面向对象之私有属性和私有方法应用案例分析
2019/12/31 Python
Flask-SocketIO服务端安装及使用代码示例
2020/11/26 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
教师中国梦演讲稿
2014/04/23 职场文书
建国大业电影观后感
2015/06/01 职场文书
2016年清明节寄语
2015/12/04 职场文书
springboot中的pom文件 project报错问题
2022/01/18 Java/Android
python创建字典及相关管理操作
2022/04/13 Python