数据结构--栈

692 阅读2分钟

什么是栈

栈(stack):是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据。

  • 栈是一种运算受限制的线性表,其限制为只能在一端进行新增和删除数据,这一端成为栈顶,相对的把另一端称之为栈底。
  • 向一个栈插入新元素又称作进栈、入栈。
  • 从栈中删除一个元素称作出栈、退栈。
  • 栈的特点为:先进后出,后进先出。

如下图:

栈常见的操作

  • push() 在栈顶位置添加一个新的元素 --> 入栈
  • pop() 在栈顶位置移除一个元素 --> 出栈
  • peek() 返回栈顶位置的元素
  • isEmpty() 判断栈是否为空
  • size() 返回栈中数据的数量
  • toString() 以字符串的形式返回栈中的数据

ES6 实现栈数据结构

这里采用数组来实现栈的操作,我们可以约定数组的头部为栈顶,尾部为栈底。

  • 栈 的封装
/**
 *
 * 栈结构
 * 特点:后进先出,在栈顶进行出栈入栈操作
 *
 * @class Stack
 */
class Stack {
  constructor() {
    this.stack = [];
  }

}

  • push() 方法的实现
  // 1. 将数据压入栈中
  push(item) {
    this.stack.unshift(item);
  }
  • pop() 方法的实现
  // 2. 将栈顶的数据取出
  pop() {
    return this.stack.shift();
  }
  • peek() 方法的实现
  // 3. 查看栈顶数据
  peek() {
    return this.isEmpty ? "栈为空" : this.stack[0];
  }
  • isEmpty() 方法的实现
  // 4. 判断栈是否为空
  isEmpty() {
    return this.stack.length === 0;
  }
  • size() 方法的实现
  // 5. 获取栈的大小
  size() {
    return this.stack.length;
  }
  • toString() 方法的实现
  // 6. toString
  toString() {
    return this.stack.join(" ");
  }

栈的总体代码

/**
 *
 * 栈结构
 * 特点:后进先出,在栈顶进行出栈入栈操作
 *
 * @class Stack
 */
class Stack {
  constructor() {
    this.stack = [];
  }
  // 栈的相关操作

  // 1. 将数据压入栈中
  push(item) {
    this.stack.unshift(item);
  }

  // 2. 将栈顶的数据取出
  pop() {
    return this.stack.shift();
  }

  // 3. 查看栈顶数据
  peek() {
    return this.isEmpty ? "栈为空" : this.stack[0];
  }

  // 4. 判断栈是否为空
  isEmpty() {
    return this.stack.length === 0;
  }

  // 5. 获取栈的大小
  size() {
    return this.stack.length;
  }

  // 6. toString
  toString() {
    return this.stack.join(" ");
  }
}