线性数据结构-栈

在JavaScript中,栈(Stack)是一种遵循后进先出(Last In First Out, LIFO)原则的数据结构。这意味着最后进入栈的元素将会是第一个被移除的元素。栈通常被用于限制线性数据的访问顺序,使得数据的插入和删除操作只能在栈的一端进行。

栈的基本操作包括:

  • push:将一个元素放入栈顶。
  • pop:移除栈顶的元素,并返回被移除的元素。
  • peek 或 top:返回栈顶的元素,但不移除它。
  • isEmpty:检查栈是否为空。
  • size:返回栈中元素的数量。

数组实现栈:

  • 数组实现的栈在大多数情况下提供了更好的缓存性能,因为数组元素在内存中是连续存储的,这有助于利用现代处理器的缓存机制。
  • 数组的push和pop操作通常是高效的,时间复杂度为O(1)。
  • 但是,如果数组需要频繁地扩容(当数组满时),这将涉及到创建新数组并复制旧数组元素的操作,这个操作的时间复杂度为O(n)。不过,这种操作并不经常发生,因为数组扩容通常是成倍增长的,所以在多次push操作后才会触发。
class Stack {constructor() {this.items = []}push(value) {this.items.push(value)}pop() {return this.items.pop()}isEmpty(){return this.items.length === 0}peek() {if(this.isEmpty()){return undefined}return this.items[this.items.length - 1]}size() {return this.items.length}
}

链表实现栈

  • 链表实现的栈在动态内存分配方面更加灵活,因为链表节点可以分散在内存中,不需要连续的内存空间。
  • 链表的插入和删除操作(对应栈的push和pop)也是时间复杂度为O(1),但是因为这些操作需要处理指针,可能会有一些额外的开销。
  • 链表实现的栈不会遇到数组扩容的问题,因为链表可以根据需要动态地分配节点。
class Node {constructor(val) {this._value = val;this._next = null;}
}class Stack {constructor() {this._top = null;this._size = 0;}isEmpty() {return this._size === 0;}push(value) {const node = new Node(value)if (this.isEmpty()) {this._top = node} node.next = this._topthis._top = nodethis._size++}pop() {if (this.isEmpty()) {return undefined;}  this._size--const removedNode = this._topthis._top = this._top.nextreturn removedNode._value}peek() {if (this.isEmpty()) {return undefined}return this._top.value;}getSize() {return this._size;}
}

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

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

相关文章

【MySQL】(基础篇二) —— MySQL初始用

MySQL初始用 目录 MySQL初始用基本语法约定选择数据库查看数据库和表其它的SHOW 在Navicat中,大部分数据库管理相关的操作都可以通过图形界面完成,这个很简单,大家可以自行探索。虽然Navicat等图形化数据库管理工具为操作和管理数据库提供了非…

简单了解java中的Map集合

Map 1、Map集合概述 java.util.Map<K, V>集合&#xff0c;里面保存的数据是成对存在的&#xff0c;称之为双列集合&#xff0c;我们称之为键值对。而Collection集合中的元素是单个存在的&#xff0c;称之为单列集合。 2、Map集合的特点 1、可以存储两个数据 2、key元…

微信小程序 导航navigation-bar

属性类型默认值必填说明最低版本titlestring否导航条标题2.9.0loadingbooleanfalse否是否在导航条显示 loading 加载提示2.9.0front-colorstring否导航条前景颜色值&#xff0c;包括按钮、标题、状态栏的颜色&#xff0c;仅支持 #ffffff 和 #0000002.9.0background-colorstring…

微信机器人实现OCR识别录入数据

介绍 采用微信的hook插件&#xff0c;然后解析微信发来的数据图片&#xff0c;通过ocr识别 然后将数据落入execl表格中。同时有权限的人可以导出数据表格即可。 流程图 代码片 文本消息处理流程_robot.py elif msg.type 0x01: # 文本消息# 管理员列表dba_user_list [wxid_…

关于Latitude5490的问题Bios引导问题

关于Latitude5490的问题Bios引导问题 一、问题描述1、第一次维修&#xff1a;2、第二次维修&#xff1a; 二、捣鼓过程1、Latitude 5490的Bios引导2、捣鼓硬盘分区格式3、使用PE修复引导4、处理方法 三、参考链接 一、问题描述 本人原本电脑型号为Latitude 5480&#xff0c;电…

Git:从配置到合并冲突

目录 1.前言 2.Git的下载与初始化配置 3.Git中新建仓库 4.Git的工作区域和文件状态 5.Git中查看操作和提交记录 6.Git中添加和提交文件 7.Git中回退提交版本 8.Git中查看版本间的差异 9.Git中删除文件 10.Git中忽略指定文件 11.Git中配置SSH密钥 12.Git中关联克隆仓库 13.Git中…

Windwos下运行程序如何不弹出黑窗口(控制台窗口)

一、在程序最开始处加一句&#xff1a; #pragma comment(linker,"/subsystem:windows /entry:mainCRTStartup") 二、在CMakeLists.txt里面加上WIN32

结构体(c++语言)

在实际问题中&#xff0c;一组数据往往具有不同的数据类型。例如&#xff0c;人口大普查时&#xff0c;我们需要记录每一位公民的姓名&#xff0c;年龄&#xff0c;性别&#xff0c;住址&#xff0c;身份证号码。这些信息分别要用整型&#xff0c;字符型&#xff0c;字符串型来…

Promise.any 使用方法

Promise.any() 是 JavaScript 中的一个静态方法&#xff0c;用于处理多个 Promise&#xff0c;并返回第一个成功解决&#xff08;fulfilled&#xff09;的 Promise 的结果。它在 ES2021&#xff08;ES12&#xff09;中引入&#xff0c;是 Promise 类的一部分。 语法 Promise.…

【教学类-40-01】20240607类似MJ的免费AI绘画工具——文心一格与通义万相

背景需求&#xff1a; 风变的AI对话大师一年到期了&#xff0c;也没有看到续费的按钮。不能使用它写代码了。 MJ早就用完了&#xff0c;最后480次&#xff0c;我担心信息课题会用到它生图&#xff0c;所以不敢用。 最近探索其他类似MJ的免费出图工具 一、文心一格&#xff08;…

windows10使用触控板、鼠标(magic trackpad)———附带BootCamp6驱动下载链接

文章目录 0 背景1 步骤1.1 下载1.2 解压1.3 安装驱动 参考 0 背景 最近在台式机&#xff08;windows10系统&#xff09;上使用mac设备&#xff0c;键盘magic keybord连上数据线就可以直接使用&#xff0c;但是触控板magic trackpad却不行&#xff0c;只有鼠标左键&#xff0c;…

每日一题——Python实现PAT甲级1077 Kuchiguse(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码点评 时间复杂度分析 空间复杂度分析 总结 我要更强 方案1&#x…

CloudFlare 防火墙规则里开放合法 Bot 爬虫的方法

明月使用 CloudFlare 也算是有一阵子了,可以说效果非常好更是非常满意,毕竟每天成千上万的 Web 攻击和 cc 攻击都能控制在几乎可以忽略不计的程度了,上次因调试需要关闭了国内线路上的网站卫士统计图覆对比就很能说明这点儿: 这是关闭防火墙当天的实时防御统计结果 这是开启…

刘强东的拼搏哲学与产品创新的启示

在当今这个快速变化的时代&#xff0c;成功不再是偶然&#xff0c;而是需要一种敢于挑战、敢于拼搏的精神。正如京东创始人刘强东所说&#xff1a;“实现梦想&#xff0c;记住这句话就够了。敢于挑战&#xff0c;敢于拼搏的人不一定能成功&#xff0c;但成功的人一定是敢于挑战…

linux Ubuntu安装samba服务器与SSH远程登录

目录 1&#xff0c;下载安装包 2&#xff0c;添加服务器 3&#xff0c;修改服务器配置 3.1 备份配置文件 3.2 修改配置 4&#xff0c;开启samba服务器 5&#xff0c;开关电脑与服务器设置 6&#xff0c; SSH远程登录 1&#xff0c;下载samba服务器安装包 sudo apt in…

unity3d:GameFramework+xLua+Protobuf+lua-protobuf,生成.cs,.pb工具流

概述 1.区分lua&#xff0c;cs用的proto 2.proto生成cs&#xff0c;使用protogen.exe&#xff0c;通过csharp.xslt修改生成cs样式 3.proto生成lua加载.pb二进制文件&#xff0c;并生成.pb列表文件&#xff0c;用于初始化加载 4.协议id生成cs&#xff0c;lua中枚举 区分cs&…

Splashtop正式入驻长三角(杭州)制造业数字化能力中心,赋能企业向数字化转型

2024年6月&#xff0c;Splashtop正式入驻长三角&#xff08;杭州&#xff09;制造业数字化能力中心。作为全球领先的远程桌面控制软件供应商&#xff0c;Splashtop致力于提供适用于远程办公、IT 和 MSP 远程支持等多场景的高性能远程桌面控制软件和解决方案&#xff0c;赋能企业…

监控易监测对象及指标之:全面监控定制版微软活动目录

随着企业信息化建设的深入&#xff0c;微软活动目录&#xff08;Active Directory, AD&#xff09;作为企业身份管理、资源访问控制及策略应用的核心组件&#xff0c;其稳定性和性能对企业业务的连续性和效率至关重要。为了满足不同企业的特定需求&#xff0c;定制版微软活动目…

Qt之QGraphicsView —— 笔记3:矩形图元连接(附完整源码)

效果 完整源码 注意:在ui文件中拖入一个QGraphicsView类窗口控件,然后用MyGraphicsView提升该类。 main.cpp #include "widget.h" #include <QApplication>int main(

SpringBoot+Vue学生宿舍管理系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 学生宿管员管理员 功能截图