JavaScript实现栈结构(Stack)

news/2024/5/4 18:15:25/文章来源:https://www.cnblogs.com/Zhengzs-blog/p/16631763.html

Js实现栈结构

一、前言

1.1 什么是数据结构

数据结构就是在计算机中,存储和组织数据的方式。
例如:图书管理,怎样摆放图书才能既能放很多书,也方便取?

常见的数据结构

  • 栈(Stack)
  • 队列(Queue)
  • 链表(Linked List)
  • 集合(Set)
  • 哈希(Hash)
  • 树(Tree)
  • 图(Graph)

1.2 什么是算法

算法通俗理解:解决问题的办法/步骤逻辑。数据结构的实现,离不开算法。

二、栈(Stack)

2.1 简介

我们知道数组是一个线性结构,并且可以在数组的任意位置插入和删除元素。而栈和队列就是比较常见的受限的线性结构,栈遵循LIFO(先进后出,后进先出)的原则。
image

程序中的栈结构:

递归:为什么没有停止条件的递归会造成栈溢出?比如函数A为递归函数,不断地调用自己(因为函数还没有执行完,不会把函数弹出栈),不停地把相同的函数A压入栈,最后造成栈溢出(Stack Overfloat)。

栈的常见操作:

  • push:添加一个新元素
  • pop:移除栈顶的元素,同时返回被移除的元素
  • peek:返回栈顶的元素,不对栈做任何修改
  • isEmpty:如果栈里没有任何元素就返回true,否则返回false
  • size:返回栈里的元素个数
  • toString:将栈结构的内容以字符串的形式返回

2.2 js封装栈

代码实现:

function Stack() {this.items = [];// 压入栈Stack.prototype.push = function (element) {this.items.push(element);};// 栈中取出元素Stack.prototype.pop = function () {return this.items.pop();};// 查看栈顶元素Stack.prototype.peek = function () {return this.items[this.items.length - 1];};// 判断栈是否为空Stack.prototype.empty = function () {return this.items.length == 0;};// 栈中元素个数Stack.prototype.size = function () {return this.items.length;};// toStringStack.prototype.toString = function () {let resString = "";for (let i = 0; i < items.length; i++) {resString += this.items[i];}return resString;};}

场景应用:

// 10转2进制function dec2binb(decnumber) {let stack = new Stack();while (decnumber > 0) {stack.push(decnumber % 2);decnumber = Math.floor(decnumber / 2);}let binstring = "";while (!stack.empty()) {binstring += stack.pop();}return binstring;}

参考资料:B站视频

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

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

相关文章

Jenkins设置中文

Jenkins是一个持续集成的平台,但是初次安装Jenkins之后,是英文的状态。下面给大家介绍如何将Jenkins设置为中文语言。一、下载Locale插件1点击【Manage Jenkins】选项。2点击【Manage Plugins】选项。 点击【可选插件】选项。 右侧搜索栏输入【Locale】选项。 勾选【插件选项…

URL重定向及绕过方法

1 概述 URL重定向漏洞也称URL任意跳转漏洞,是由于网站信任了用户的输入导致恶意跳转。URL重定向主要用来钓鱼,比如URL跳转中最常见的跳转在登录口、支付口,也就是一旦登录将会跳转任意自己构造的网站,如果设置成指定的URL,则会造成钓鱼等危害。 2 详情 2.1 跳转常用参数 在…

js删除css样式

js删除css样式_百度知道 https://zhidao.baidu.com/question/680409425108037292.html1、如果使用class加的样式的话,可以使用document.getElementById("objid").className=""来清空样式;  2、如果是直接加的style="***"属性的话,可以使用…

ArcGIS API forJavaScript4.x去除地图获取焦点的黑色边框

ArcGIS API forJavaScript4.x去除地图获取焦点的黑色边框CSS /* 去掉地图聚焦边框 */ .esri-view-surface--inset-outline:focus::after {outline: none !important; }箴言:因为这些东西是非常简单的。不要抱怨自己学不会,那是因为你没有足够用心。

NetCDF库编译安装

1. 准备 系统环境,全部是deepin系统自带,并无单独安装deepin 20.6 gcc 8.3.0 g++ 8.3.0 cmake 3.22.1 netcdf安装版本:此次使用最新4.9.0,系统为deepin 20.6,大于4.3.0 源码下载地址,下载netcdf-c-4.9.0.tar.gz: https://downloads.unidata.ucar.edu/netcdf/ netCDF-C S…

el-button点击了按钮会出现保留点击的状态

问题 el-button点击了按钮之后,将鼠标移出按钮,会出现保留点击的状态 再查看它的css样式后,可以看到官方默认设置有:focus的状态规则解决办法 在el-button的css里自定义或者复制原有的color、border-color、background-color三条样式, 然后再重写:hover方法就可以了, 其实…

SpringBoot日志系统——logback

logback是SpringBoot内置的日志处理框架,你会发现spring-boot-starter其中包含了spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架 logback。而spring-boot-starter-web包含了spring-boot-starter,可通过引入spring-boot-starter-web后的项目JAR依赖关…

seurat 单细胞数据分析中 VizDimLoadings 函数

前期处理:https://www.jianshu.com/p/fef17a1babc2 #可视化对每个主成分影响比较大的基因集 001、dat <- pbmc[["pca"]]@feature.loadings ## 数据来源 dat[1:3, 1:3] dat <- dat[order(-dat[,1]),][1:29,1] dat <- as…

网页返回顶部的几种方法

网页返回顶部的几种方法 - 腾讯云开发者社区-腾讯云 https://cloud.tencent.com/developer/article/2043539 1,在页面顶部固定一个 返回网页顶部的 按钮.back-to-top {position: fixed;right: 20px;bottom: 10px;width: 100px;height: 30px;text-align: center;line-height: …

Navicat_Keygen_Patch_v5.6

navicat download: Navicat keygen download: Navicat_Keygen_Patch_v5.6 注意事项: 1.运行注册机请断网;2.最好关闭电脑的杀毒软件; 3.无需将注册机放到 Navicat Premium 安装目录下;4.请选择对版本,Products那块;5.安装完成后不要直接运行软件,要先打开注册机 pat…

AI模型集成到业务系统的方式演化

如今,AI模型百花齐放,在业务场景中的使用是越来越多,那AI模型是如何集成到系统中的呢?这几年的集成方式又有何变化呢?在一些早期系统中,模型比较简单,这时,真正在线上系统部署模型时,模型只是以算法的形式出现,模型参数作为算法所需要的“数据”,存储在内存或分布式…

Python教程:文件和读写的详细教程

文件操作的模式 文件操作的模式如下表:1. open 打开文件 使用 open 打开文件后一定要记得调用文件对象的 close() 方法。比如可以用 try/finally 语句来确保最后能关闭文件。 file_object = open(rD:\test.txt) # 打开文件 try:all_the_text = file_object.read( ) # 读文件的…

学习:python进阶 (一)

python解释器多版本共存 1.下载需要的版本安装包 2.增加环境变量,把优先用的python放到第一个 修改python.exe可执行文件,在终端输入对应名称可以指定需要运行的python版本 虚拟环境 python3 -m venv 虚拟环境路径 #新建虚拟环境 cd 虚拟环境路径/Script acticate.bat #开启虚…

04Spring MVC入门

Spring MVC三层架构表现层 业务层 数据访问层MVC(处理表现层)Model:模型层 View:视图层 Controller:控制层底层请求方式 在controller中添加 @RequestMapping("/http")public void http(HttpServletRequest request, HttpServletResponse response) throws IOExce…

Python中itertools

一、介绍 itertools 是python的迭代器,itertools提供的工具相当高效且节省内存 使用这些工具,可创建自己定制的迭代器用于高效率循环 1.count(初值=0,步长=1):1 from itertools import count2 for i in count():3 print i4 if i > 10:5 break6 7 #从0…

R语言中 %||%什么意思?

001、 %||% 函数用于判断 左侧变量是否为NULL, 如果左侧为NULL, 则返回右侧的变量; 否则,返回左侧的变量library(rlang) x = NULL y = 10 x %||% y ## 左侧变量x为NULL, 则返回右侧变量y的值x = 888 x %||% y ## 左侧变量x不为NULL, 则返回左侧变量的值

2022HDU多校第五场 - 1007 Count Set

置换群 + 生成函数 + NTT + 启发式合并/分治 题意 给一个 1-n 的排列 p 和一个非负整数 k,求大小为 k 的 {1, 2, 3,... n} 的子集合 T 的数量,满足即 T 的元素按 p 置换一轮后和自身没有交集 思路\(i\) -> \(p_i\) 连边,找到 m 个环设某个环的大小为 a,要找 b 个元素…

MapReduce计算流程

MapReduce的计算流程 1.1 原始数据File The books chronicle the adventures of the adolescent wizard Harry Potter and his best friends Ron Weasley and Hermione Granger, all of whom are students at Hogwarts School of Witchcraft and Wizardry. 1T数据被切分成块存放…

TCP协议

TCP协议 TCP(Transmission Control Protocol)协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。 TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。…

MySQL九:MVCC能否解决幻读问题

转载~ 幻读【前后多次读取,数据总量不一致】同一个事务里面连续执行两次同样的sql语句,可能导致不同结果的问题,第二次sql语句可能会返回之前不存在的行。事务A执行多次读取操作过程中,由于在事务提交之前,事务B(insert/delete/update)写入了一些符合事务A的查询条件的记…