JS(ES5,ES6)实现栈数据结构

2023-11-13

栈是一种遵从后进先出原则的有序集合。新添加的或待删除的元素都保存在栈的同一端,称作栈顶,另一端叫做栈底。

栈也被用在编程语言的编译器和内存中保存变量,方法调用等。

ES5实现

function Stack(){
    let items = [];
    // 向栈添加元素
    this.push = function(ele){
        items.push(ele);
    }
    // 从栈移出元素
    this.pop = function(){
        return items.pop();
    }
    // 查看栈顶元素
    this.peek = function(){
        return items[items.length-1];
    }
    // 检查栈是否为空
    this.isEmpty = function(){
        return items.length == 0;
    }
    // 清空栈
    this.clear = function(){
        items = [];
    }
    // 打印栈元素
    this.print = function(){
        console.log(items.toString());
    }
}

测试:

let stack = new Stack();
console.log(stack.isEmpty());      //ture
stack.push(1);
stack.push(2);
stack.print();                              //1,2

ES6实现

const items = new WeakMap();  //WeakMap数据类型可以确保属性是私有的,用WeakMap来存储items变量
class Stack{
    constructor(){
        items.set(this, []);  //以this(Stack类自己的引用)为键,把代表栈的数组存入items
    }
    // 向栈添加元素
    push(ele){
        let s = items.get(this);
        s.push(ele);
    }
    // 从栈移出元素
    pop(){
        let s = items.get(this);
        console.log(s.pop());
    }
    // 查看栈顶元素
    peek(){
        let s = items.get(this);
        console.log(s[s.length-1]);
    }
    // 检查栈是否为空
    isEmpty(){
        let s = items.get(this);
        if(s.length == 0){
           console.log('空');
        }else{
            console.log('不空');
        }
    }
    // 清空栈
    clear(){
        let s = items.get(this);
        for(var i = 0; i<s.length;i++){
            s.pop(s[i])
        }
        console.log('栈已清空')
    }
    // 打印栈
    print(){
        let s = items.get(this);
        console.log(s.toString());
    }
}

测试:

let stack = new Stack();
stack.isEmpty();     //空
stack.push(1);      
stack.push(2);      
stack.isEmpty();     //不空
stack.print();       //1,2
stack.peek();        //2
stack.pop();         //2
stack.clear();       //栈已清空
stack.isEmpty();     //空
stack.print();

WeakMap
栈的应用

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JS(ES5,ES6)实现栈数据结构 的相关文章

  • iPad - 无法在框架内滚动

    我无法滚动 iPad Safari 中框架内调用的 pdf 我已经尝试过两件事 2 指滚动 使用对象 嵌入代替框架 但这是行不通的 事实上我已经尝试了很多东西 溢出 高度等等 请帮我 先感谢您 根据这篇文章http support appl
  • 为什么隐式符号到字符串转换会导致 JavaScript 中出现类型错误?

    有一个 toString on Symbol在 ES6 中 它返回字符串表示形式Symbol 但想知道为什么 Symbol 不起作用 运行这个表达式会抛出TypeError我没想到 后者只是打电话吗 toString 在一个新的Symbol
  • Sonar 中的 javascript 代码覆盖率

    我是使用 Sonar 和插件进行 javascript 代码覆盖的新手 使用 Sonar 分析时 有哪些可能性可以找出 javascript 代码的质量 包括代码覆盖率 目前我正在使用 karma runner 它提供代码覆盖率报告 可以在
  • Sequelize - 使用 es6 和模块运行迁移

    我不确定我是否做错了什么或者什么 我觉得我正在运行一个现代的 相当常见的堆栈 但我无法让新的 Sequelize v6 与我的设置完美配合 我在 Node v14 17 Sequelize v6 6 2 上 在我的 package json
  • 使用命名的成功/错误回调在 AngularJS 中声明一个 Promise

    我正在尝试做一些与 http 服务非常相似的事情 根据我的理解 http 返回一个 Promise 对象 使用它时 语法是 http success function data success callback error function
  • 无法读取未定义的“触及”属性

    为什么我会收到此错误无法读取未定义的属性 为什么无法读取formName controls email touched但它能够阅读formName get custDetails touched
  • 递归修剪对象中所有元素的更好方法?

    如果我有一个像这样的物体 const obj field subfield innerObj a asdasd asdas innerArr s ssad innerArrObj b adsad 我想出了这样的东西 const trimFi
  • JavaScript:常量属性

    在javascript中 我可以将对象的属性声明为常量吗 这是一个示例对象 var XU Cc Components classes or function aXU this Cc Components classes var XU new
  • 窗口大小调整触发的 DOM 事件

    我有一个布局相当复杂的页面 最初打开页面时 某些元素的对齐存在问题 但是 可以通过更改浏览器窗口的大小来 永久 解决此问题 显然 我不希望用户必须调整浏览器窗口的大小才能使页面正确显示 所以我想知道是否有一种方法可以在页面首次加载时以编程方
  • ReactCSSTransitionGroup 组件WillLeave 未调用

    我尝试使用 ReactCssTransition 但不知何故该事件没有被调用 componentWillLeave 这是我的组件 import React Component from react import TransitionGrou
  • 带有 mkdocs 的本地 mathjax

    我想在无法访问互联网的计算机上使用 MathJax 和 Mkdocs 因此我不能只调用 Mathjax CDN Config mkdocs yml site name My Docs extra javascript javascripts
  • 如何在 javascript 中基于类型字符串创建新对象?

    如何基于变量类型字符串 包含对象名称 在 javascript 中创建新对象 现在我有 随着更多工具的出现 列表会变得更长 function getTool name switch name case SelectTool return n
  • 自定义指令链接中的 element.replaceWith 仅在第一次调用时有效

    我是 Angularjs 的新手 不太了解幕后的情况 基本上我想创建一个 E 扭结指令 基于控制器中的数据 我动态创建html 就像整个 表 一样 以替换该指令 我的 html 文件中的指令是这样的
  • 尝试使用 Firebug 查找 JavaScript 文件中的函数

    我试图找到这个函数调用 myFooBar 该函数在某些 HTML 中内联引用 但页面加载了大量 JavaScript 并且在每个文件中搜索该函数需要相当多的工作 如何使用 Firebug 找到此函数所在的 JavaScript 文件 打开脚
  • JavaScript Promise 不执行 .then()

    我在 JavaScript 中的 Promise 方面遇到了一些问题 我想做的是获得一个地址列表 然后对于每个地址 我需要调用地理编码 API 来获取 lat lng 然后我将继续将标记与热图一起绘制 这是我的代码 let promiseK
  • JavaScript 提升解释

    下面的片段有什么区别 var a 0 function b a 10 return function a b console log a gt 10 and var a 0 function b a 10 return function a
  • Javascript onload 不起作用[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在使用
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相
  • 检测浏览器选项卡是否具有焦点

    是否有可靠的跨浏览器方法来检测选项卡是否具有焦点 场景是 我们有一个定期轮询股票价格的应用程序 如果页面没有焦点 我们可以停止轮询并为每个人节省流量噪音 特别是当人们喜欢打开具有不同投资组合的多个选项卡时 Is window onblur
  • p5 向量减法“sub”返回错误

    我一直在尝试将 p5 草图上传到 React 构建中 使用react p5 wrapper 我能够成功在屏幕上渲染画布 但是 某些矢量函数会导致错误 var distance this position dist ball position

随机推荐

  • 小小圣诞树来了

    作者 小刘在这里 每天分享云计算网络运维课堂笔记 疫情之下 你我素未谋面 但你一定要平平安安 一 起努力 共赴美好人生 夕阳下 是最美的 绽放 愿所有的美好 再疫情结束后如约而至 目录 圣诞树 一 代码 圣诞树 一 代码 import tu
  • postgres之jsonb属性的简单操作

    jsonb的一些简单操作 增删改查 更新操作 attributes属性为jsonb类型 方法定义 jsonb set target jsonb path text new value jsonb create missing boolean
  • MySql 笔记

    数据结构 B TREE 二叉树 顺序增长依次查询效率低 红黑树 数据多了深度越深 效率自然低了 HASH 查询条件限制 B TREE 度 degree 节段的数据存储个数 叶节点具有 相同的深度 叶节点的指针为空 节点的数据key从左到右递
  • vue3 多种方法的锚点定位

    在 Vue 3 中 可以通过多种方式实现锚点定位 包括使用原生的 JavaScript 方法和利用 Vue Router 提供的导航守卫等 下面我会分别介绍这些方法 1 使用原生 JavaScript 方法 在 Vue 3 中 你可以使用
  • 【Hadoop生态圈】7.离线OLAP引擎Hive入门教程

    文章目录 1 简介 2 架构分析 3 环境准备 4 使用客户端工具操作hive 4 1 数据库操作 4 2 DDL操作 4 2 1 创建表 4 2 2 导入数据到hive表中 4 2 3 指定列和行分隔符创建表 4 2 4 数据类型 4 3
  • [已解决]jeesite生成页面的弹窗问题

    jeesite生成的页面如需弹窗layer写法会有问题 actions push a href class btnList title i class fa fa check i a nbsp data confirm text 提示信息
  • ansible安装nginx

    ansible安装nginx 定义一个ansible组 把nginx tar包传到ansible主机 ansible 组名 m shell a yum y install pcre devel open devel gcc gcc c ng
  • Golang 单元测试详尽指引

    文末有彩蛋 作者 yukkizhang 腾讯 CSIG 专项技术测试工程师 本篇文章站在测试的角度 旨在给行业平台乃至其他团队的开发同学 进行一定程度的单元测试指引 让其能够快速的明确单元测试的方式方法 本文主要从单元测试出发 对Golan
  • IntelliJ IDEA 进行js Debug调试

    idea的js调试目前看来不同给力 一是玩转它需要安装谷歌插件支持 二是貌似存在一些bug 一 新建一个jsp并打上断点 二 调试 idea出现提示 安装JetBrains IDE Support支持 问题出现了 点击其中连接却一直连不上
  • [其他]IDEA中Maven项目配置国内源

    配置国内源主要解决了 在maven项目中pom xml下载jar包失败或过慢的问题 在IDEA中的设置分成两种 设置当前项目与新创项目 我们就需要两种都进行设置 不然只有在当前项目配置了国内源 新创项目的时候还是默认的状态 由于下面两种设置
  • 有监督对比loss计算

    https blog csdn net wf19971210 article details 116715880 关于对比损失 无监督对比损失 通常视数据增强后的图像与原图像互为正例 而对于有监督对比损失来说 可以将同一batch中标签相同
  • 均值计算的R语言实现

    均值计算的R语言实现 在数据分析和统计学中 均值是一个常用的指标 用于描述数据集的集中趋势 在R语言中 我们可以使用多种方法来计算均值 下面将介绍几种常见的方法 并提供相应的R代码示例 使用mean 函数计算均值 mean 函数是R语言中用
  • Scratch的克隆体

    克隆体 克隆就是将角色本体完全复制一份 包含该角色当前的所有属性 例如造型 位置 颜色 大小等 控制积木中提供了克隆自己积木 在事件积木中 单独提供了一个当作为克隆体启动时的积木 当某个角色被克隆 则其克隆体会触发该事件 故而 对于那些克隆
  • 第十课,OpenGL光照之贴图

    光照贴图 光照贴图 及使用纹理代替物体颜色 物体的实际颜色由物体材质和光照决定 漫反射贴图 使用一张覆盖物体的图像 让我们能够逐片段索引其独立的颜色值 方式 1 将纹理传入 GLuint texture1 loadTexture conta
  • 在 CentOs7 中安装宝塔面板和 Docker(包括MySQL,Redis)

    在 CentOs7 中安装宝塔面板和Docker 包括MySQL Redis 1 使用 Xshell 连接 CentOs7 2 安装宝塔面板 2 1 安装 Tomcat 同 Java 8 2 1 安装 Docker 2 2 安装 MySQL
  • 「考研算法」

    考研算法 前言 本系列文章涉及的算法内容 针对的是哈尔滨工业大学854科目 在本文中通过具体的算法题进行讲解相应算法 今天涉及的算法主要有线性筛 十大排序中快速排序和归并排序 C语言版 一 线性筛算法 算法题目 筛质数 给定一个正整数 n
  • ctf_show_web4

    这一道题他们给的提示是 url var log nginx access log 用上面的这个来找出日志接下来就是文件包含这里我们要用到bp 抓包后我们在User Agent中插入一句话木马 之后连接你的蚁剑 测试连接连接成功 最后就会得到
  • Android项目如何上传Gitee仓库

    前言 最近Android项目比较多 我都是把Android项目上传到Gitee中去 GitHub的话我用的少 可能我还是更喜欢Gitee吧 毕竟Gitee仓库用起来更加方便 一 创建Gitee仓库 1 先创建一个Gitee账号 然后登录上去
  • 基于区块链智能合约的疫苗溯源系统

    绪论 该系统基于以太坊的Solidity进行智能合约开发 并通过hardhat进行部署在了本机 通过Mocha和Chai进行了单元测试的编写 同时提供了一个基于React的前端界面与用户进行交互 区块链的介绍 不难看出 区块链技术对现有的经
  • JS(ES5,ES6)实现栈数据结构

    栈是一种遵从后进先出原则的有序集合 新添加的或待删除的元素都保存在栈的同一端 称作栈顶 另一端叫做栈底 栈也被用在编程语言的编译器和内存中保存变量 方法调用等 ES5实现 function Stack let items 向栈添加元素 th