js实现一个数据结构——栈

news2024/11/24 18:27:03

栈的概念就不再赘述,无可厚非的先进后出,而JS又是高级语言,数组中的方法十分丰富,已经自带了push pop方法进行入栈出栈的操作。

1.基本实现

class Stack {
    constructor() {
        this.items = [];
    }

    // 入栈
    push(item) {
        this.items.push(item);
    }

    // 出栈
    pop() {
        return this.items.pop();
    }

    // 栈顶元素
    peek() {
        return this.items[this.items.length - 1];
    }

    // 栈的大小
    size() {
        return this.items.length;
    }

    // 清空栈
    clear() {
        this.items = [];
    }

    // 获取栈内元素
    getItem() {
        return this.items;
    }

    // 判断栈是否为空
    isEmpty() {
        return this.items.length === 0;
    }
}

代码很简单,重要的是思想 先进后出先进后出!!
2.函数执行模式——栈
计算机在调用函数的时候,采用的是函数栈的形式(用于递归)
如:

const fun1 = ()=>
{
    return console.log('1')
}
const fun2 = ()=>
{
    fun1()
    return console.log('2')
}
fun2()

那么结果应该是什么呢?答案是 1 2
可以证明 先执行了fun1()后执行了fun2()
那么原理呢?原理是在调用函数时采用的是栈的形式,在调用fun2时 fun2入栈,然后fun1入栈,所以在执行时为fun1先出栈,fun2后出栈
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1817417.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HCIA1 华为VRP系统基本操作

1.实验组网介绍 使用PC电脑通过串口线,直连1台全新的路由器console port,进行简单配置。 2.配置思路 2.1配置设备名称 2.2配置路由器接口地址 2.3保存配置并重启设备 3.配置步骤 3.1 Console方式登录 略 3.2查看设备版本信息 3.3设备基本配置 &am…

抖音a_bogus爬虫逆向补环境

抖音a_bogus爬虫逆向补环境 写在前面 https://github.com/ShilongLee/Crawler 这是我为了学习爬虫而搭建的爬虫服务器项目,目标是作为一个高性能的可靠爬虫服务器为广大爬虫爱好者和安全工程师提供平台进行学习爬虫,了解爬虫,应对爬虫。现已…

C语言 | Leetcode C语言题解之第148题排序链表

题目: 题解: struct ListNode* merge(struct ListNode* head1, struct ListNode* head2) {struct ListNode* dummyHead malloc(sizeof(struct ListNode));dummyHead->val 0;struct ListNode *temp dummyHead, *temp1 head1, *temp2 head2;while…

【吊打面试官系列-Mysql面试题】锁的优化策略有哪些?

大家好,我是锋哥。今天分享关于 【锁的优化策略有哪些?】面试题,希望对大家有帮助; 锁的优化策略有哪些? 1、读写分离 2、分段加锁 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 3、减少锁持有的时间 4.多个线程尽量以相同的…

ESP32S3中使用按键控制LED灯亮灭

// 定义 LED 与 按键引脚 int led_pin 4; int button_pin 5;// 定义 LED 逻辑值 int led_logic 0; // 判断 LED 的状态是否改变过 bool status false;void setup() { pinMode(led_pin, OUTPUT);pinMode(button_pin, INPUT_PULLDOWN); }void loop() {// 按键消抖if (digita…

农资投入品系统架构:数字化农业的技术支撑与创新

在当今数字化时代,农业领域也在迅速迈向数字化和智能化的新阶段。农资投入品系统作为农业生产的重要支撑,其系统架构的设计与创新对于提高农业生产效率、保障粮食安全具有重要意义。本文将探讨农资投入品系统架构的设计原则、核心模块以及未来发展趋势。…

4. Revit API UI 之 Ribbon(界面)

4. Revit API UI 之 Ribbon(界面) 第二篇中,我们提到了IExternalApplication,该接口需要实现两个方法:Revit启动时调用的OnStartup 方法,和Revit关闭时调研的OnShutdown 方法。文中还给了个例子&#xff0…

详解Next Auth:自定义邮箱密码登录注册、Github、Notion授权 Convex集成

最近用NextJS框架做全栈项目做的很顺手,现在想给项目加上登录、注册、鉴权拦截、分角色路由控制等功能,并接入Github、Notion等第三方登录。 可以使用NextJS官方提供的Auth框架实现。 Intro 阅读本篇,你将学会: 1、登录、注册等…

论文阅读ReLU-KAN和Wav-KAN

这是我读KAN系列论文的第三篇,今天把两篇论文放在一起写,分别是: ReLU-KAN: https://arxiv.org/abs/2406.02075 Wav-KAN: https://arxiv.org/abs/2405.12832 之所以放在一起,是因为这两篇论文针对KAN的…

使用Spring Boot 3实现邮箱登录/注册接口开发

Hi~!这里是奋斗的小羊,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~ 💥💥个人主页:奋斗的小羊 💥💥所属专栏:C语言 🚀本系列文章为个人学习…

MySQL-连接查询

049-内连接之等值连接 案例:查询每个员工所在的部门名称,要求显示员工名、部门名。 select e.ename, d.dname from emp e inner join dept d on e.deptnod.deptno;注意:inner可以省略 select e.ename, d.dname from emp e join dept d on…

AI播客下载:AI在商业中的应用(The AI in Business Podcast)

"AI在商业中的播客"是为那些需要寻找AI机会、将AI能力与战略对齐并实现投资回报的非技术商业领袖准备的。 每周,Emerj人工智能研究公司的首席执行官Daniel Faggella会采访来自财富500强公司和独角兽初创公司的顶级AI高管,以揭示趋势、用例和最…

【译】SQLAlchemy文档:SQLAlchemy 统一教程

SQLAlchemy Unified Tutorial SQLAlchemy 是 Python SQL工具包和ORM,它为应用程序开发人员提供了 SQL 的全部功能和灵活性。它提供了一整套企业级持久性模式,专为高效和高性能的数据库访问而设计。 SQLAlchemy呈现为两层API:Core和ORM&…

龙迅LT9611UXC 2 PORT MIPIDSI/CSI转HDMI 2.1,支持音频IIS/SPDIF输入,支持标准4K60HZ输出

龙迅LT9611UXC描述: LT9611UXC是一个高性能的MIPI DSI/CSI到HDMI2.0转换器。MIPI DSI/CSI输入具有可配置的单端口或双端口,1高速时钟通道和1~4高速数据通道,最大2Gbps/通道,可支持高达16Gbps的总带宽。LT9611UXC支持突发模式DSI视…

GStreamer安装——iOS

安装iOS开发 支持从iOS6开始的所有版本 先决条件 iOS开发需要下载Xcode和iOSSDK。Xcode 可以在App Store或 这里 iOSSDK,如果它还没有包含在您的Xcode版本中, 可以从下载选项卡下的Xcode首选项菜单下载。 最低要求iOS版本为6.0。的最低要求版本 Xcode…

Android帧绘制流程深度解析 (二)

书接上回:Android帧绘制流程深度解析 (一) 5、 dispatchVsync: 在请求Vsync以后,choreographer会等待Vsync的到来,在Vsync信号到来后,会触发dispatchVsync函数,从而调用onVsync方法…

栈(Stack)汇总

栈简介 栈(Stack)是只允许在一端进行插入或者删除操作的线性表。它的操作特性可以概括为——后进先出(Last In First Out,LIFO)。栈顶(Top)——线性表允许进行插入删除的一端; 栈底…

SwaggerSpy:一款针对SwaggerHub的自动化OSINT安全工具

关于SwaggerSpy SwaggerSpy是一款针对SwaggerHub的自动化公开资源情报(OSINT)安全工具,该工具专为网络安全研究人员设计,旨在简化广大红队研究人员从SwaggerHub上收集已归档API信息的过程,而这些OSINT信息可以为安全人…

BigDecimal-解决java中的浮点运算

《阿里巴巴 Java 开发手册》中提到:“为了避免精度丢失,可以使用 BigDecimal 来进行浮点数的运算”。浮点数的运算竟然还会有精度丢失的风险吗?确实会! 示例代码: float a 2.0f - 1.9f; float b 1.8f - 1.7f; Syst…

制作带有目录的电子书

有时候想自己制作一些.mobi格式的电子书在kindle上进行阅读,有两种简单做法。 方法一: 工具:markdown编辑器、calibre 在markdown编辑器中编辑想要制作电子书的文本,在想要设置目录的地方加一个#(我只制作了一级标题…