栈基础

  1. 栈的定义:栈是一个 后进先出 的线性表,要求只在栈顶进行删除和插入操作;所谓的栈,其实就是一个特殊的线性表(顺序表、链表),对于栈来说,这个表尾称为栈的 栈顶 ,相应的表头称为 栈底
    • 插入操作(Push):叫做进栈,也称为压栈,入栈;
    • 删除操作(Pop):叫做出栈,也称为弹栈;
  2. 栈的存储结构
    • 「顺序」存储结构(数组实现)
    • 「链式」存储结构(链表实现)

栈的实现

class Stack {
  constructor() {
    // 存储栈的数据
    this.data = {}
    // 记录栈的数据个数(相当于数组的 length)
    this.count = 0
  }

  // push() 入栈方法
  push(item) {
    // 方式1:数组方法 push 添加(不推荐)
    // this.data.push(item)

    // 方式2:利用数组长度(不推荐)
    // this.data[this.data.length] = item

    // 方式3:计数方式(建议使用)
    this.data[this.count] = item
    // 入栈后,count 自增
    this.count++
  }

  // pop() 出栈方法
  pop() {
    // 出栈的前提是栈中存在元素,应先行检测
    if (this.isEmpty()) {
      console.log('栈为空!')
      return
    }
    // 移除栈顶数据
    // 方式1:数组方法 pop 移除
    // return this.data.pop()

    // 方式2:计数方式
    const temp = this.data[this.count - 1]
    delete this.data[--this.count]
    return temp
  }

  // isEmpty() 检测栈是否为空
  isEmpty() {
    return this.count === 0
  }

  // top() 用于获取栈顶值
  top() {
    if (this.isEmpty()) {
      console.log('栈为空!')
      return
    }
    return this.data[this.count - 1]
  }

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

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

const s = new Stack()
s.push('a')
s.push('b')
s.push('c')

参考资料

  1. 卡尔:《代码随想录》

打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 栈基础
  2. 2. 栈的实现
  3. 3. 参考资料