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.TreeView结合ASP.Net和数据库生成菜单导航条
Aug 27 Javascript
Javascript 类型转换方法
Oct 24 Javascript
JavaScript获取和设置CheckBox状态的简单方法
Jul 05 Javascript
jQuery动态添加删除select项(实现代码)
Sep 03 Javascript
使用js画图之饼图
Jan 12 Javascript
jQuery插件slides实现无缝轮播图特效
Apr 17 Javascript
详解JavaScript时间格式化
Dec 23 Javascript
js基本算法:冒泡排序,二分查找的简单实例
Oct 08 Javascript
bootstrap可编辑下拉框jquery.editable-select
Oct 12 jQuery
vue2.0在table中实现全选和反选的示例代码
Nov 04 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
Feb 10 Javascript
JavaScript面试中常考的字符串操作方法大全(包含ES6)
May 10 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
「OVERLORD」动画重要删减!雅儿贝德的背叛?至尊猎杀队结成
2020/04/09 日漫
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
2011/07/14 PHP
使用php实现快钱支付功能(涉及到接口)
2013/07/01 PHP
thinkPHP中多维数组的遍历方法
2016/01/09 PHP
window.open的页面如何刷新(父页面)上层页面
2012/12/28 Javascript
文本框只能选择数据到文本框禁止手动输入
2013/11/22 Javascript
jQuery中DOM操作实例分析
2015/01/23 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
jquery表单验证插件formValidator使用方法
2016/04/01 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
详解JavaScript数组过滤相同元素的5种方法
2017/05/23 Javascript
JS实现自定义状态栏动画文字效果示例
2017/10/12 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
基于Vue+ElementUI的省市区地址选择通用组件
2019/11/20 Javascript
JS实现放烟花效果
2020/03/10 Javascript
理解Python中的类与实例
2015/04/27 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
深入理解Python3中的http.client模块
2017/03/29 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
python如何生成各种随机分布图
2018/08/27 Python
python redis连接 有序集合去重的代码
2019/08/04 Python
Python实现不规则图形填充的思路
2020/02/02 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
django orm模块中的 is_delete用法
2020/05/20 Python
html5使用canvas实现弹幕功能示例
2017/09/11 HTML / CSS
体育教育专业自荐信范文
2013/12/20 职场文书
上班时间打瞌睡检讨书
2014/09/26 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
全陪导游词
2015/02/04 职场文书
活动总结模板大全
2015/05/11 职场文书
大学生暑期实践报告
2015/07/13 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技