前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >什么是栈?

什么是栈?

原创
作者头像
菜园前端
发布2023-06-10 18:55:16
1690
发布2023-06-10 18:55:16
举报
文章被收录于专栏:前端学习文档前端学习文档

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

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

实现功能

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

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

应用场景

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

基础案例

通过数组实现

代码语言:javascript
复制
const stack = [1]
stack.push(2) // 入栈
stack.pop() // 出栈
const top = stack[0] // 获取栈顶值
const size = stack.length // 获取栈的元素个数
stack.length = 0 // 清空栈

通过类模拟实现

代码语言:javascript
复制
class Stack {
    constructor() {
        this.data = {}
        this.count = 0
    }

    /**
     * 入栈
     */
    push(item) {
        this.data[this.count++] = item

        return item
    }

    /**
     * 出栈
     */
    pop() {
        if (this.count > 0) {
            const item = this.data[this.count - 1]
            delete this.data[--this.count]

            return item
        } else {
            return -1
        }
    }

    /**
     * 获取栈顶值
     */
    top() {
        if (this.count > 0) {
            return this.data[this.count - 1]
        } else {
            return -1
        }
    }

    /**
     * 获取栈的元素个数
     */
    size() {
        return this.count
    }

    /**
     * 清空栈
     */
    clear() {
        this.data = {}
        this.count = 0
    }
}

const stack = new Stack()

stack.push('a')
stack.push('b')
stack.push('c')

stack.pop()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现功能
  • 应用场景
  • 基础案例
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档