返回

JS的数据结构——栈,易学易用的数据结构

前端

栈的概念

栈是一种后进先出的数据结构,其主要特点是只能在栈顶进行数据操作,后进的数据先出。栈可以看作是一个弹簧,你可以不断地向弹簧中添加物体,但只能从弹簧的顶部取出物体。

栈具有以下基本操作:

  • push():向栈顶添加一个元素。
  • pop():从栈顶删除一个元素并返回该元素。
  • peek():返回栈顶的元素,但不删除该元素。
  • isEmpty():检查栈是否为空。

栈的实现

栈可以在 JavaScript 中使用数组或链表来实现。数组实现更为简单,但链表实现更具通用性。

使用数组实现栈时,可以使用数组的 push() 和 pop() 方法来模拟栈的操作。

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

  push(item) {
    this.items.push(item);
  }

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

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

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

使用链表实现栈时,可以使用链表的 insert() 和 remove() 方法来模拟栈的操作。

class Stack {
  constructor() {
    this.head = null;
  }

  push(item) {
    const newNode = {
      data: item,
      next: this.head,
    };
    this.head = newNode;
  }

  pop() {
    if (this.isEmpty()) {
      return null;
    }
    const item = this.head.data;
    this.head = this.head.next;
    return item;
  }

  peek() {
    if (this.isEmpty()) {
      return null;
    }
    return this.head.data;
  }

  isEmpty() {
    return this.head === null;
  }
}

栈的应用

栈在计算机科学中有着广泛的应用,下面列举了一些常见的应用场景:

  • 函数调用:栈用于存储函数调用时的局部变量和参数。
  • 表达式求值:栈用于存储表达式求值过程中的中间结果。
  • 递归:栈用于存储递归函数的调用信息。
  • 浏览器历史记录:浏览器使用栈来存储用户访问过的页面历史记录。
  • 后退/前进操作:栈用于存储用户在浏览器中执行的页面后退/前进操作。

结语

栈是一种简单但非常实用的数据结构,它在 JavaScript 中有着广泛的应用。通过本文的学习,你已经对栈有了一个基本的了解,可以在实际项目中灵活地使用它来解决各种问题。