什么是栈?

原文链接:https://note.noxussj.top/?source=helloworld


栈是基础数据结构,栈是一种遵循后进先出原则的有序集合,添加新元素的一端称为栈顶,另一端称为栈底。操作栈的元素时,只能从栈顶操作(添加、移除、取值)。

img

实现功能

在 JavaScript 中没有栈,但是可以通过 Array 实现栈的所有功能

  • push () 入栈
  • pop () 出栈
  • top () 获取栈顶值
  • size () 获取栈的元素个数
  • clear () 清空栈

应用场景

  • 十进制转二进制
  • 判断字符串的括号是否有效
  • 函数调用堆栈
  • 二叉树前序遍历(迭代方式)
  • ...

基础案例

通过数组实现

1const stack = [1] 2stack.push(2) // 入栈 3stack.pop() // 出栈 4const top = stack[0] // 获取栈顶值 5const size = stack.length // 获取栈的元素个数 6stack.length = 0 // 清空栈

通过类模拟实现

1class Stack { 2 constructor() { 3 this.data = {} 4 this.count = 0 5 } 6 7 /** 8 * 入栈 9 */ 10 push(item) { 11 this.data[this.count++] = item 12 13 return item 14 } 15 16 /** 17 * 出栈 18 */ 19 pop() { 20 if (this.count > 0) { 21 const item = this.data[this.count - 1] 22 delete this.data[--this.count] 23 24 return item 25 } else { 26 return -1 27 } 28 } 29 30 /** 31 * 获取栈顶值 32 */ 33 top() { 34 if (this.count > 0) { 35 return this.data[this.count - 1] 36 } else { 37 return -1 38 } 39 } 40 41 /** 42 * 获取栈的元素个数 43 */ 44 size() { 45 return this.count 46 } 47 48 /** 49 * 清空栈 50 */ 51 clear() { 52 this.data = {} 53 this.count = 0 54 } 55} 56 57const stack = new Stack() 58 59stack.push('a') 60stack.push('b') 61stack.push('c') 62 63stack.pop()
点赞
收藏

评论区

加载中...

相关推荐

stack顺序存储结构

《偶刚开始学习数据结构,欢迎拍砖111》栈是只能通过访问它的一段来实现数据存储的一种线性数据结构,换句话来说就是先进后出的原则,FILO,与队列刚好相反哈,现在只说stack。栈包括以下几种基本运算(1)初始化(2)判断是否为空(3)push(4)pop(5)top其他的则根据这几种基本操作进行组合,即可实现。栈的实现同样

栈和队列

栈原理栈(stack)又名堆栈,是一种只能在表尾进行插入和删除操作的线性表。能够进行操作的这一端被称为栈顶,相对地,把另一端称为栈底。:::warning栈内元素操作时先进后出,类似于电梯上下成员,最后进去的人最先出

什么是JavaScript 调用栈?

原文链接:什么是调用栈?我们写的JS代码大多数都是同步模式,也就是从上往下依次执行。后一个任务必须要等前一个任务结束才能开始执行,程序的执行顺序和我们代码的编写顺序是完全一致的。程序执行中每遇到一个任务都会先入栈,当前入栈的任务执行完毕后就会出栈。本来栈的

5 手写Java Stack 核心源码

Stack是Java中常用的数据结构之一,Stack具有"后进先出(LIFO)"的性质。只能在一端进行插入或者删除,即压栈与出栈栈的实现比较简单,性质也简单。可以用一个数组来实现栈结构。1.入栈的时候,只在数组尾部插入2.出栈的时候,只在数组尾部删除我们来看一下Stack的用法:如下publicstaticvoidmai

Java实现顺序栈

一、分析  栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表。  顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。  一个标准的顺序栈

C语言利用va_list、va_start、va_end、va_arg宏定义可变参数的函数

在定义可变参数的函数之前,先来理解一下函数参数的传递原理:1、函数参数是以栈这种数据结构来存取的,在函数参数列表中,从右至左依次入栈。2、参数的内存存放格式:参数的内存地址存放在内存的堆栈段中,在执行函数的时候,从最后一个(最右边)参数开始入栈。因此栈底高地址,栈顶低地址,举个例子说明一下:voidtest(inta,floatb,ch