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 相关文章推荐
TopList标签和JavaScript结合两例
Aug 12 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
Mar 12 Javascript
PageSwitch插件实现100种不同图片切换效果
Jul 28 Javascript
JS动态增删表格行的方法
Mar 03 Javascript
jQuery自定义数值抽奖活动代码
Jun 11 Javascript
详解js树形控件—zTree使用总结
Dec 28 Javascript
jQuery元素选择器实例代码
Feb 06 Javascript
JS去除字符串中空格的方法
Feb 14 Javascript
用JavaScript和jQuery实现瀑布流
Mar 19 Javascript
Angular.js指令学习中一些重要属性的用法教程
May 24 Javascript
Vue最新防抖方案(必看篇)
Oct 30 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 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
实用函数10
2007/11/08 PHP
PHP截取汉字乱码问题解决方法mb_substr函数的应用
2008/03/30 PHP
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
2010/12/19 PHP
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
phpMyAdmin通过密码漏洞留后门文件
2018/11/20 PHP
firefox浏览器下javascript 拖动层效果与原理分析代码
2007/12/04 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
JS获取地址栏参数的两种方法(简单实用)
2016/06/14 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
JS异步文件分片断点上传的实现思路
2016/12/25 Javascript
原生JS改变透明度实现轮播效果
2017/03/24 Javascript
关于Node.js的events.EventEmitter用法介绍
2017/04/01 Javascript
vue项目中公用footer组件底部位置的适配问题
2018/05/10 Javascript
jquery实现上传文件进度条
2020/03/26 jQuery
浅析python递归函数和河内塔问题
2017/04/18 Python
Python调用ctypes使用C函数printf的方法
2017/08/23 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
python中re模块知识点总结
2021/01/17 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
char型变量中能不能存贮一个中文汉字
2015/07/08 面试题
广告学专业推荐信范文
2013/11/23 职场文书
大学生如何写自荐信
2014/01/08 职场文书
广告学毕业生求职信
2014/01/30 职场文书
活动总结报告范文
2014/05/04 职场文书
旅游文化节策划方案
2014/06/06 职场文书
护理专业毕业生自荐信
2014/06/15 职场文书
计算机专业自荐信
2015/03/05 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
python 算法题——快乐数的多种解法
2021/05/27 Python
Java tomcat手动配置servlet详解
2021/11/27 Java/Android