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有关元素内容操作小结
Dec 20 Javascript
js简单实现点击左右运动的方法
Apr 10 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
Jun 11 Javascript
Bootstrap栅格系统的使用和理解2
Dec 14 Javascript
jquery 禁止鼠标右键并监听右键事件
Apr 27 jQuery
前端主流框架vue学习笔记第二篇
Jul 26 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
Dec 24 Javascript
JavaScript实现仿Clock ISO时钟
Jun 29 Javascript
Vue自定义指令上报Google Analytics事件统计的方法
Feb 25 Javascript
vue项目中使用AES实现密码加密解密(ECB和CBC两种模式)
Aug 12 Javascript
vue 监听窗口变化对页面部分元素重新渲染操作
Jul 28 Javascript
一篇超完整的Vue新手入门指导教程
Nov 18 Vue.js
微信小程序自定义导航栏
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 sprintf()函数用例解析
2011/05/18 PHP
php配合jquery实现增删操作具体实例
2013/12/12 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
tp5.1 框架数据库-数据集操作实例分析
2020/05/26 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
javascript 传统事件模型构造的事件监听器实现代码
2010/05/31 Javascript
JS实现div内部的文字或图片自动循环滚动代码
2013/04/19 Javascript
jQuery 无刷新分页实例代码
2013/11/12 Javascript
JavaScript中的object转换函数toString()与valueOf()介绍
2014/12/31 Javascript
JavaScript从数组中删除指定值元素的方法
2015/03/18 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
JavaScript实现区块链
2018/03/14 Javascript
vue 自定义指令自动获取文本框焦点的方法
2018/08/25 Javascript
Spring boot 和Vue开发中CORS跨域问题解决
2018/09/05 Javascript
详解JavaScript的数据类型以及数据类型的转换
2019/04/20 Javascript
python根据经纬度计算距离示例
2014/02/16 Python
Python 比较两个数组的元素的异同方法
2017/08/17 Python
python opencv 直方图反向投影的方法
2018/02/24 Python
Pandas 按索引合并数据集的方法
2018/11/15 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
由面试题加深对Django的认识理解
2019/07/19 Python
简单瞅瞅Python vars()内置函数的实现
2019/09/27 Python
Python如何实现FTP功能
2020/05/28 Python
Python如何输出警告信息
2020/07/30 Python
HTML5新特性之语义化标签
2017/10/31 HTML / CSS
美国殿堂级滑板、冲浪、滑雪服装品牌:Volcom(钻石)
2017/04/20 全球购物
美国半成品食材配送服务商:Home Chef
2018/01/25 全球购物
Berghaus官网:户外服装和设备,防水服
2020/01/17 全球购物
写给爸爸的道歉信
2014/01/15 职场文书
初中优秀班集体申报材料
2014/05/01 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
MySQL笔记 —SQL运算符
2022/01/18 MySQL
python读取mat文件生成h5文件的实现
2022/07/15 Python