资讯专栏INFORMATION COLUMN

js数据结构-栈

Apollo / 800人阅读

摘要:栈栈是一种遵循后进先出的数据结构,其总共就两个主要的操作,分别是和。学习前端的同学可能对于数据结构和算法复杂度相对于其他语言的工程师会稍弱一些,但是这些对于一个向深入学习前端的来说还是非常重要。

栈是一种遵循后进先出(LIFO)的数据结构,其总共就两个主要的操作,分别是push和pop。

看上面这张图可以大致的知道,栈的几个特点:

初始化:

有一块连续的存储空间

栈顶

栈的长度

push操作:

向栈中添加新的元素

栈顶向后挪动一个位置,指向最新的数据地址

如果栈满了继续push的化,会抛出overflow的错误

pop操作:

返回栈顶数据

栈顶向前挪动一个位置,指向前一个数据地址

如果栈中没有数据继续pop的话,会抛出underflow的错误

通过上面的几个特点,来看一看js如何用代码实现一个栈

    class Stack {
       /**
        * 初始化
        */
        constructor(max = 100) {
            // 存储空间
            this.data = new Array(max);
            // 栈在最初是化的时候里面没有任何数据,所以栈顶指向-1
            this.top = -1;
            // 栈空间的大小
            this.max = max;
        }
        
       /**
        * push操作
        */
        push(x) {
            if(this.top === this.max - 1){
                throw "overflow";
            }
            // push一个新的数据,栈顶的指向也同时像后挪动一位,指向最新的数据地址
            this.top++;
            // 将新的数据添加进栈
            this.data[this.top] = x;
        }
        
       /**
        * pop操作
        */
        pop() {
            if(this.top === -1){
                throw "underflow"
            }
            // 获得栈顶数据
            const x = this.data[this.top];
            this.top--;
            return x;
        }
        
       /**
        * 获取栈的长度
        */
        get length(){
            return this.top + 1
        }
    }

通过上面的代码演示,对于栈应该会有一个大致的了解,后面会继续介绍其他的数据结构,并且可能会介绍如何使用栈来实现其他的数据结构,以及数据结构的一些应用。
学习前端的同学可能对于数据结构和算法复杂度相对于其他语言的工程师会稍弱一些,但是这些对于一个向深入学习前端的来说还是非常重要。

最后如果文章有讲错或讲的不对的地方,请大家留言更正哈。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100515.html

相关文章

  • JS

    摘要:栈学习数据结构与算法读书笔记。栈又名堆栈,是一种遵循后进先出原则的有序集合。新添加或待删除的元素都保存在栈的末尾,称作栈顶,另一端称作栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。 栈 《学习JavaScript数据结构与算法》读书笔记。 栈(stack)又名堆栈,是一种遵循后进先出(LIFO)原则的有序集合。新添加或待删除的元素都保存在栈的末尾,称作栈顶,另一端称作栈底。在栈里,...

    Lin_R 评论0 收藏0
  • js 调用机制与ES6尾调用优化介绍

    摘要:调用栈的运行机制机制程序运行到一个函数,它就会将其添加到调用栈中,当从这个函数返回的时候,就会将这个函数从调用栈中删掉。在调用栈中每个调用侦都对应一个函数,最上方的调用帧称为当前帧,调用栈是由所有的调用侦形成的。 showImg(https://segmentfault.com/img/remote/1460000019244497?w=900&h=600); 调用栈的英文名叫做Cal...

    AaronYuan 评论0 收藏0
  • js数据结构和算法(二)和队列

    摘要:对于栈来说,这个表尾称为栈的栈顶,相应的表头称为栈底。栈和队列的区别栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。出栈操作出栈操作就是在栈顶取出数据,栈顶指针随之下移的操作。 基本概念 栈和队列都是动态的集合,在栈中,可以去掉的元素是最近插入的哪一个。栈实现了后进先出。在队列中,可以去掉的元素总是在集合中存在的时间最长的那一个。队列实现了先进先出的策略。 栈的官...

    jsummer 评论0 收藏0
  • JS 调用机制与 ES6 尾调用优化介绍

    摘要:在调用栈中每个调用侦都对应一个函数,最上方的调用帧称为当前帧,调用栈是由所有的调用侦形成的。我们应该在日常的中,有意识的使用的尾调用优化,来减少调用栈的长度,节省客户端内存。调用栈的英文名叫做Call Stack,大家或多或少是有听过的,但是对于js调用栈的工作方式以及如何在工作中利用这一特性,大部分人可能没有进行过更深入的研究,这块内容可以说对我们前端来说就是所谓的基础知识,咋一看好像用处...

    jemygraw 评论0 收藏0
  • 你不知道的 JS 错误和调用常识

    摘要:错误堆栈包含了产生该错误时完整的调用栈信息。总结通过本文的描述,相信你对中的调用栈对象错误堆栈有了清晰的认识,在遇到错误的时候不在慌乱。 本文首发知乎专栏:《前端周刊》。全文共 6988 字,读完需 10 分钟,速读需 3 分钟。通过剖析 JS 中调用栈的工作机制,讲解错误抛出、处理的正确姿势,以及错误堆栈的获取、清理处理方法,希望大家对这个少有人关注但极其有用的知识点能够有所理解和掌...

    tainzhi 评论0 收藏0
  • js数据结构

    摘要:向一个栈插入新元素又称作进栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素从一个栈删除元素又称作出栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素...

    LeviDing 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<