数据结构与算法之栈(JavaScript)

本文介绍了栈的概念,以及如何使用JavaScript数组和对象实现栈。详细讲解了私有属性的实现方法,包括命名约定、Symbol、WeakMap以及TypeScript修饰符。最后讨论了如何使用栈解决将十进制数转换为任意进制数的问题。
摘要由CSDN通过智能技术生成

一、栈的概念

栈是一种后进先出(LIFO)的数据结构,比如生活中桌子上堆放的一叠书,餐厅里面堆放的盘子,这都可以看做是栈结构,它是一种有序集合。新添加的元素或者待删除的元素都保存在栈顶,而另一端是栈底,从这可以看出,我们只能对栈顶操作。

栈有很多用处,比如在内存中保存变量(在JavaScript中保存引用类型的变量)、执行环境栈、浏览器前进后退等。下面我将讲述在JavaScript中如何表示栈。

二、数组实现

根据栈的特性,我们要实现一个Stack类,这个类有以下方法:

  • push(element):向栈顶添加新元素
  • pop():删除栈顶元素
  • peek():返回栈顶元素
  • size():返回栈的长度
  • isEmpty():栈是否为空
  • clear():清空栈

首先,先创建Stack类,初始化构造函数:

class Stack {
   
  constructor() {
   
    this.items = []
  }
}

入栈(push)

  push(element) {
   
    this.items.push(element)
  }

出栈(pop)

  pop() {
   
    return this.items.pop()
  }

返回栈顶元素(peek)

  peek() {
   
    return this.items[this.items.length - 1]
  }

栈是否为空(isEmpty)

  isEmpty() {
   
    return this.items.length === 0
  }

清空栈(clear)

  clear() {
   
    this.items = []
  }

栈的大小(size)

  size() {
   
    return this.items.length
  }

下面我们创建实例对象stack来测试:

const stack = new Stack()
const {
    log } = console

log(stack.isEmpty()) // true

stack.push(1)
stack.push(2)
stack.push(3)

log(stack.peek()) // 3
log(stack.pop()) // 3
log(stack.size()) // 2
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值