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前台数据获取实现代码
Mar 16 Javascript
使用基于jquery的gamequery插件做JS乒乓球游戏
Jul 31 Javascript
jQuery当鼠标悬停时放大图片的效果实例
Jul 03 Javascript
JS实现点击下载的小例子
Jul 10 Javascript
深入理解Javascript作用域与变量提升
Dec 09 Javascript
javascript制作的网页侧边弹出框思路及实现代码
May 21 Javascript
form表单序列化详解(推荐)
Aug 15 Javascript
对于js垃圾回收机制的理解
Sep 14 Javascript
babel之配置文件.babelrc入门详解
Feb 22 Javascript
JavaScript学习笔记之图片库案例分析
Jan 08 Javascript
js实现GIF图片的分解和合成
Oct 24 Javascript
JavaScript实现显示和隐藏图片
Apr 29 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绘制在图片上的正余弦曲线
2013/06/08 PHP
php过滤html标记属性类用法实例
2014/09/23 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
jQuery select的操作实现代码
2009/05/06 Javascript
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
JavaScript常用全局属性与方法记录积累
2013/07/03 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
Three.js利用性能插件stats实现性能监听的方法
2017/09/25 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
解决axios会发送两次请求,有个OPTIONS请求的问题
2018/10/25 Javascript
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
Python2中文处理纪要的实现方法
2018/03/10 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
Python用for循环实现九九乘法表
2018/05/31 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
开业庆典答谢词
2014/01/18 职场文书
自荐信格式简述
2014/01/25 职场文书
《画》教学反思
2014/04/14 职场文书
反邪教警示教育方案
2014/05/13 职场文书
2015年药店工作总结
2015/04/20 职场文书
2015年法院工作总结范文
2015/04/28 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书
python四个坐标点对图片区域最小外接矩形进行裁剪
2021/06/04 Python