javascript创建一个基于数组的栈结构
栈是一种遵从后进先出(LIFO)原则的有序集合。新添加或待删除的元素都保存在栈的同 一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
栈拥有以下方法:
push(element): 元素入栈, 添加一个或多个新元素到栈顶
pop(): 元素出栈,移除栈顶的元素,同时返回被移除的元素
peek(): 返回栈顶的元素,不对站内元素做任何修改
isEmpty(): 判断栈是否为空,如果栈内没有任何元素就返回true,否则返回false
clear(): 移除栈内的所有元素
size(): 返回栈里的元素个数,该方法和数组的length属性类似
说明:
数组的头部就是栈底,数组的尾部就是栈顶
因为是基于javascript的数组构建的栈,所以会用到各种数组方法,首先创建一个类表示类,这里用到了ES6的语法,接下来便开始逐个实现栈中的6个常规方法。

s1.声明栈构造函数
//在栈的构造函数中声明一个空数组用来保存栈内的元素
class Stack {
constructor() {
this.items = [];
}
}
s2.实现push()方法,元素入栈
使用数组的push方法,将元素放入数组的末尾,也就是栈结构中的栈顶。
push(element){
this.items.push(element);
}
s3.实现pop()方法,元素出栈,并返回该元素
根据先进后出的原则,移除的元素是最后添加进栈的元素,这里使用数组的pop方法
pop() {
return this.items.pop();
}
s4.实现peek()方法,查看栈顶元素,也就是最后添加进栈的元素
在数组中表现为数组最后一个索引位置的元素,访问数组的最后一个元素可以用 length -1
peek() {
return this.items[this.items.length - 1];
}
s5.实现isEmpty()方法,查看栈是否为空
其实就是判断数组的长度是否为0
isEmpty() {
return this.items.length === 0;
}
s6.实现clear()方法,清空栈内所有元素
直接将数组重置为空即可
clear() {
return this.items = [];
}
s7.实现size()方法,返回栈的长度
在数组中的表现就是返回数组的length
size() {
return this.items.length;
}
至此,基于数组搭建的栈就完成了,接下来就开始测试一下!下面的代码直接复制就可以用了。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title> </title>
</head>
<body>
<h1>测试 栈</h1>
<script>
//在栈的构造函数中声明一个空数组用来保存栈内的元素
class Stack {
constructor() {
this.items = [];
} push(element){
this.items.push(element);
} pop() {
return this.items.pop();
} peek() {
return this.items[this.items.length - 1];
} isEmpty() {
return this.items.length === 0;
} clear() {
return this.items = [];
} size() {
return this.items.length;
}
}
//首先实例化一个栈对象
const stack = new Stack(); stack.push(12); //进栈
stack.push(20);
console.log(stack.isEmpty()); //输出false
console.log(stack.pop()); //输出20,这里移除了栈顶元素20,并返回了
console.log(stack.peek()); //输出12,这是返回元素,12依然保存在栈中 console.log(stack.size()); //输出1 stack.clear(); //清栈,此时栈空了
console.log(stack.isEmpty()); //输出true
</script>
</body>
</html>

后面会再写一篇基于JavaScript对象搭建的栈结构实现。纯手打不易,转载请注明出处!
<html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title> </title></head><body><h1>测试 栈</h1><script>//在栈的构造函数中声明一个空数组用来保存栈内的元素class Stack {constructor() {this.items = [];}push(element){this.items.push(element);}
pop() {return this.items.pop();}
peek() {return this.items[this.items.length - 1];}
isEmpty() {return this.items.length === 0;}
clear() {return this.items = [];}
size() {return this.items.length;}}//首先实例化一个栈对象const stack = new Stack();
stack.push(12);//进栈stack.push(20);console.log(stack.isEmpty());//输出falseconsole.log(stack.pop());//输出20,这里移除了栈顶元素20,并返回了console.log(stack.peek());//输出12,这是返回元素,12依然保存在栈中
console.log(stack.size());//输出1
stack.clear();//清栈,此时栈空了console.log(stack.isEmpty());//输出true</script></body></html>
javascript创建一个基于数组的栈结构的更多相关文章
- javascript创建一个基于对象的栈结构
上篇博客介绍了基于数组创建一个栈,这是用对象创建一个栈 s1.声明一个Stack类 class Stack { constructor() { this.count = 0; this.items = ...
- 用html5的canvas和JavaScript创建一个绘图程序
本文将引导你使用canvas和JavaScript创建一个简单的绘图程序. 创建canvas元素 首先准备容器Canvas元素,接下来所有的事情都会在JavaScript里面. <canvas ...
- 在C#/.NET应用程序开发中创建一个基于Topshelf的应用程序守护进程(服务)
本文首发于:码友网--一个专注.NET/.NET Core开发的编程爱好者社区. 文章目录 C#/.NET基于Topshelf创建Windows服务的系列文章目录: C#/.NET基于Topshelf ...
- 如何创建一个基于 MSBuild Task 的跨平台的 NuGet 工具包
MSBuild 的 Task 为我们扩展项目的编译过程提供了强大的扩展性,它使得我们可以用 C# 语言编写扩展:利用这种扩展性,我们可以为我们的项目定制一部分的编译细节.NuGet 为我们提供了一种自 ...
- 如何创建一个基于命令行工具的跨平台的 NuGet 工具包
命令行可是跨进程通信的一种非常方便的手段呢,只需启动一个进程传入一些参数即可完成一些很复杂的任务.NuGet 为我们提供了一种自动导入 .props 和 .targets 的方法,同时还是一个 .NE ...
- 基于数组的栈(Java)
package com.rao.linkList; /** * @author Srao * @className ArrayStack * @date 2019/12/3 13:41 * @pack ...
- CXF 入门:创建一个基于WS-Security标准的安全验证(CXF回调函数使用,)
http://jyao.iteye.com/blog/1346547 注意:以下客户端调用代码中获取服务端ws实例,都是通过CXF 入门: 远程接口调用方式实现 直入正题! 以下是服务端配置 ==== ...
- JavaScript 创建一个 form 表单并提交
<!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...
- 如何创建一个基于 .NET Core 3 的 WPF 项目
在 Connect(); 2018 大会上,微软发布了 .NET Core 3 Preview,以及基于 .NET Core 3 的 WPF:同时还发布了 Visual Studio 2019 预览版 ...
随机推荐
- C语言复习————基本数据类型、运算符和表达式
数据类型/运算符/表达式 主要分两部分介绍,第一部分介绍常用的数据类型,例如:常量和变量/整型/实型/字符型:第二部分介绍算数运算符和算数表达式以及赋值运算符和逗号运算符. 一. 常用的数据类型 1. ...
- 30 分钟快速入门 Docker 教程
原文地址:梁桂钊的博客 博客地址:http://blog.720ui.com 欢迎关注公众号:「服务端思维」.一群同频者,一起成长,一起精进,打破认知的局限性. 一.欢迎来到 Docker 世界 1. ...
- Zookeeper监控(Zabbix)
一直在弄监控,这些个中间件Zookeeper.Kafka......,平时也只知道一点皮毛,也就搭建部署过,没有真正的用过,一般都是大数据的同学在用,作为运维人员我需要对他做一个监控,由于对他不是 ...
- Java 学习笔记之 Sleep停止线程
Sleep停止线程: 在Sleep状态下被interrupt,interrupted 状态会被擦除,返回false. 线程在Sleep状态下被interrupt: public class Sleep ...
- MongoDB 学习笔记之 group聚合
group聚合: key: 分组字段 cond:过滤条件 reduce: curr是当前行 result是每组的结果集 initial : 组变量初始值 finalize: 统计一组后的回调函数 用g ...
- 记一次客户DB CPU短时间内冲高至99%处理
问题背景: 客户反映DB CPU短时间内冲高,查询变得缓慢,记录此背景下的处理方式 1> 查看系统负载及相关sql 2> 查看相关sql的执行计划 3> 想看相关sql的执行计划是否 ...
- java IO、NIO、AIO详解
概述 在我们学习Java的IO流之前,我们都要了解几个关键词 同步与异步(synchronous/asynchronous):同步是一种可靠的有序运行机制,当我们进行同步操作时,后续的任务是等待当前调 ...
- e课表项目第二次冲刺周期第十天
昨天完成了什么? 昨天还有一天第一次冲刺周期就结束了,我们的工作也接近尾声了,所以今天我利用之前的方法,完成了对监听的设置,以及对修改界面的编写,可以实现相应的删除和修改的功能,然后我和我们组的成员商 ...
- .NET Core 3.0中IAsyncEnumerable<T>有什么大不了的?
.NET Core 3.0和C# 8.0最激动人心的特性之一就是IAsyncEnumerable<T>(也就是async流).但它有什么特别之处呢?我们现在可以用它做哪些以前不可能做到的事 ...
- hihocoder 数论二·Eular质数筛法
数论二·Eular质数筛法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,上次我学会了如何检测一个数是否是质数.于是我又有了一个新的问题,我如何去快速得 ...