概念

栈是一个线性结构,在计算机中是一个相当常见的数据结构。

栈的特点是只能在某一端添加或删除数据,遵循先进后出的原则

栈 - 图1

实现

每种数据结构都可以用很多种方式来实现,其实可以把栈看成是数组的一个子集,所以这里使用数组来实现

  1. class Stack {
  2. constructor() {
  3. this.stack = []
  4. }
  5. push(item) {
  6. this.stack.push(item)
  7. }
  8. pop() {
  9. this.stack.pop()
  10. }
  11. peek() {
  12. return this.stack[this.getCount() - 1]
  13. }
  14. getCount() {
  15. return this.stack.length
  16. }
  17. isEmpty() {
  18. return this.getCount() === 0
  19. }
  20. }

应用

选取了 LeetCode 上序号为 20 的题目

题意是匹配括号,可以通过栈的特性来完成这道题目

  1. var isValid = function (s) {
  2. let map = {
  3. '(': -1,
  4. ')': 1,
  5. '[': -2,
  6. ']': 2,
  7. '{': -3,
  8. '}': 3
  9. }
  10. let stack = []
  11. for (let i = 0; i < s.length; i++) {
  12. if (map[s[i]] < 0) {
  13. stack.push(s[i])
  14. } else {
  15. let last = stack.pop()
  16. if (map[last] + map[s[i]] != 0) return false
  17. }
  18. }
  19. if (stack.length > 0) return false
  20. return true
  21. };