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调用activeX获取u盘序列号的代码
Nov 21 Javascript
使用JavaScript动态设置样式实现代码及演示动画
Jan 25 Javascript
tangram框架响应式加载图片方法
Nov 21 Javascript
JavaScript实现文字与图片拖拽效果的方法
Feb 16 Javascript
JavaScript之AOP编程实例
Jul 17 Javascript
javascript事件冒泡简单示例
Jun 20 Javascript
JavaScript触发onScroll事件的函数节流详解
Dec 14 Javascript
Angular组件化管理实现方法分析
Mar 17 Javascript
JavaScript学习笔记之函数记忆
Sep 06 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
Jan 23 Javascript
JS中async/await实现异步调用的方法
Aug 28 Javascript
js实现星星打分效果
Jul 05 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
PHP5权威编程阅读学习笔记 附电子书下载
2012/07/05 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
2014/05/05 PHP
php替换字符串中间字符为省略号的方法
2015/05/04 PHP
PHP使用flock实现文件加锁的方法
2015/07/01 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
基于php解决json_encode中文UNICODE转码问题
2020/11/10 PHP
jQuery 1.5最新版本的改进细节分析
2011/01/19 Javascript
基于jquery的blockui插件显示弹出层
2011/04/14 Javascript
有关JavaScript的10个怪癖和秘密分享
2011/08/28 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
js 通用订单代码
2013/12/23 Javascript
基于dropdown.js实现的两款美观大气的二级导航菜单
2015/09/02 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
2016/05/20 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
bootstrap导航、选项卡实现代码
2016/12/28 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
原生js实现淘宝购物车功能
2020/06/23 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
JS原型和原型链原理与用法实例详解
2020/02/05 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python类参数self使用示例
2014/02/17 Python
探寻python多线程ctrl+c退出问题解决方案
2014/10/23 Python
Python中threading模块join函数用法实例分析
2015/06/04 Python
详解django中自定义标签和过滤器
2017/07/03 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
通过python3实现投票功能代码实例
2019/09/26 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
一名老师的自我评价
2014/02/07 职场文书
个人委托书格式
2014/04/04 职场文书
文艺演出策划方案
2014/06/07 职场文书
新学期红领巾广播稿
2014/10/04 职场文书
功夫熊猫观后感
2015/06/10 职场文书
Java中Quartz高可用定时任务快速入门
2022/04/03 Java/Android
Java 写一个简单的图书管理系统
2022/04/26 Java/Android