js数据结构和算法之栈和队列详解

1.定义

栈是一种重要的线性结构。栈(stack)是一个后进先出(last in first out,lifo)的线性表,它要求只在表尾进行删除和插入操作。对于栈来说,这个表尾称为栈的栈顶,相应的表头称为栈底。

栈的操作只能在这个线性表的表尾进行:
     栈的插入操作(Push),叫做进栈,也称为压栈,入栈。

     栈的删除操作(Pop),叫做出栈,也称为弹栈。

2.栈的顺序存储结构

因为栈的本质是一个线性表,线性表有两种存储形式,那么栈也有分为栈的顺序存储结构和栈的链式存储结构

顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。

例如我们编程语言的数组结构就是这样滴。

360截图20180317120118827.jpg

链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。

很显然,这样说的话链式存储结构的数据元素存储关系并不能反映其逻辑关系,因此需要用一个指针存放数据元素的地址,这样子通过地址就可以找到相关联数据元素的位置。

360截图20180317120131785.jpg

最开始栈中不含有任何数据,叫做空栈,此时栈顶就是栈底。然后数据从栈顶进入,栈顶栈底分离,整个栈的当前容量变大。数据出栈时从栈顶弹出,栈顶下移,整个栈的当前容量变小。

360截图20180317120147169.jpg

3.栈操作

(1).基本操作

/** *  * 栈的构造函数  * */ function Stack() {  // 用数组来模拟栈 this.dataStore = []; //底层数据结构是数组this.top = 0; //top应该是等于数组的length的}//栈需要有如下的方法Stack.prototype = {/** * 1. push() * 向栈中压入一个新元素, 需要将其保存在数组中变量 top 所对 * 应的位置, 然后将 top 值加 1, 让top指向数组中下一个空位置 * 特别注意 ++ 操作符的位置, 它放在 this.top 的后面, 这样新入栈的元素就被放在 * top 的当前值对应的位置, 然后再将变量 top 的值加 1, 指向下一个位置 * */push:function(element){this.dataStore[this.top++] = element;},/** * pop() 方法恰好与 push() 方法相反——它返回栈顶元素, 同时将变量 top 的值减 1 * 也可以改造一下,只--this.top,不返回栈顶元素 * */pop:function(){return this.dataStore[--this.top];},/** * peek() 方法返回数组的第 top-1 个位置的元素, 即栈顶元素 * */peek:function(){return this.dataStore[this.top-1];},length:function(){return this.top;},clear:function(){ this.top = 0;}};//测试 Stack 类的实现var s = new Stack();s.push("David");s.push("Raymond");s.push("Bryan");console.log("length: " + s.length());//length: 3console.log(s.peek());//Bryanvar popped = s.pop();console.log("The popped element is: " + popped);//The popped element is: Bryans.push("Cynthia");s.clear();console.log("length: " + s.length());//length: 0

登录后复制

相关推荐:

PHP基于数组实现的堆栈和队列功能实例分享

以上就是js数据结构和算法之栈和队列详解的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2781538.html

(0)
上一篇 2025年3月8日 16:18:47
下一篇 2025年3月8日 16:18:53

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JavaScript如何格式化时间的方法

    本文为大家分享了javascript时间格式化的方法,分享给大家供大家参考,可以说是Web项目中不可或缺的一个Javascript类库,它可以帮助你快速的解决客户端编程的许多问题,下面贴出一个用js格式化时间的方法。 Date.protot…

    编程技术 2025年3月8日
    200
  • JS计算日期时间差

    这次给大家带来js计算日期时间差,js计算日期时间差的注意事项有哪些,下面就是实战案例,一起来看一下。 js判断日期时间的代码如下所示: alert(GetDateDiff(“2018-02-27 19:20:22”,”2018-02-27…

    编程技术 2025年3月8日
    200
  • vue中使用cropperjs

    这次给大家带来vue中如何使用cropperjs,vue中使用cropperjs的注意事项有哪些,下面就是实战案例,一起来看一下。 用vue的项目里需要对图片进行裁剪,于是使用了cropperjs,在使用的过程中也踩过一些坑,以下是在.vu…

    2025年3月8日
    200
  • js怎么做出撤销重做功能

    这次给大家带来js怎么做出撤销重做功能,js做出撤销重做功能的注意事项有哪些,下面就是实战案例,一起来看一下。 浏览器的功能越来越强大,许多原来由其他客户端提供的功能渐渐转移到了前端,前端应用也越来越复杂。许多前端应用,尤其是一些在线编辑软…

    2025年3月8日
    200
  • JS脚本加载后再执行相应回调函数的操作

    这次给大家带来JS脚本加载后再执行相应回调函数的操作,JS脚本加载后再执行相应回调函数的注意事项有哪些,下面就是实战案例,一起来看一下。 项目中经常会遇到这样的问题:当某个 js 脚本加载完成后再执行相应任务,但很多朋友可能并不知道怎么判断…

    编程技术 2025年3月8日
    200
  • JS怎样操作改变radio的状态

    这次给大家带来JS怎样操作改变radio的状态,JS操作改变radio的状态的注意事项有哪些,下面就是实战案例,一起来看一下。 h5的radio是自带选中状态改变的,但是如果自带的状态无法满足自己的需求时,就需要自己去实现。 代码如下: h…

    2025年3月8日 编程技术
    200
  • JS做到复制内容到剪贴板

    这次给大家带来JS做到复制内容到剪贴板,JS做到复制内容到剪贴板的注意事项有哪些,下面就是实战案例,一起来看一下。 常见方法 查了一下万能的Google,现在常见的方法主要是以下两种: 第三方库:clipboard.js原生方法:docum…

    2025年3月8日
    200
  • ExtJs整合的Echarts

    这次给大家带来ExtJs整合的Echarts,使用ExtJs整合Echarts的注意事项有哪些,下面就是实战案例,一起来看一下。 由于Echarts不提供表格功能,想要实现上图下表,需要自己增加一个table标签。 ExtJs整合Echar…

    编程技术 2025年3月8日
    200
  • D3.js 绘制动态进度条

    这次给大家带来D3.js 绘制动态进度条,D3.js 绘制动态进度条的注意事项有哪些,下面就是实战案例,一起来看一下。 D3 是什么 D3 的全称是(Data-Driven Documents),顾名思义可以知道是一个被数据驱动的文档。听名…

    2025年3月8日 编程技术
    200
  • JS中的Array filter() 方法如何使用

    这次给大家带来JS中的Array filter() 方法如何使用,使用JS中的Array filter()方法的注意事项有哪些,下面就是实战案例,一起来看一下。 什么是稀疏数组     数组元素的索引不一定要连续的,它们之间可以有空缺。每个…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论