• [数据结构] 栈



    二、栈

      栈是一种特殊的列表,栈内的元素只能通过列表的一端访问,这一端称为栈顶。栈被称为一种后入先出(LIFO,last-in-first-out)的数据结构。

      由于栈具有后入先出的特点,所以任何不在栈顶的元素都无法访问。为了得到栈底的元 素,必须先拿掉上面的元素。

      对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈。入栈使用 push() 方法,出 栈使用 pop() 方法(调用了pop方法后,栈顶元素也从栈中被永久性地删除了),想要预览栈顶元素可以使用peek()方法,该方法只会返回栈顶元素,而不会删除它。

      

    // 定义一个push方法
    function push(element) {
      this.dataStore[this.stackSize++] = element;
      return this;  // 此处return this,等于retern的是实例对象,以便后面链式操作
    }
    
    function pop() {
      this.stackSize--;  // 数组里的元素弹出后,栈的长度应该对应-1
      return this.dataStore.pop();  // 操作数组,弹出并删除栈顶元素
    }
    function  peek() {
      return this.dataStore[this.stackSize-1];  // 返回栈顶元素
    }
    
    function clear() {
      this.stackSize = 0; // 同时让栈大小等于0
      this.dataStore = [];  // 清空栈元素
    }
    
    function Stack() {
        this.stackSize = 0;
        this.dataStore = [];
        this.pop = pop;
        this.push = push;
        this.peek = peek;
        this.clear = clear;
    }
    
    const  s = new Stack();
    s.push(1).push(2).push(3).push(4).push(5); // 链式调用,每调用一次返回的还是s这个实例对象
    console.log(s);
    /* 返回值
    Stack {
      stackSize: 5,
      dataStore: [ 1, 2, 3, 4, 5 ],
      pop: [Function: pop],
      push: [Function: push],
      peek: [Function: peek] }
    * */
    
    let p = s.pop();
    console.log(p); // 5
    console.log(s);
    /* 返回值
    Stack {
      stackSize: 4,
      dataStore: [ 1, 2, 3, 4],
      pop: [Function: pop],
      push: [Function: push],
      peek: [Function: peek] }
    * */
    
    let k = s.peek();
    console.log(k); // 4
    console.log(s);
    /* 返回值
    Stack {
      stackSize: 4,
      dataStore: [ 1, 2, 3, 4],
      pop: [Function: pop],
      push: [Function: push],
      peek: [Function: peek] }
    * */
    
    s.clear();
    console.log(s);
    /* 返回值
    Stack {
      stackSize: 0,
      dataStore: [],
      pop: [Function: pop],
      push: [Function: push],
      peek: [Function: peek] }
    * */
  • 相关阅读:
    第二阶段第二次spring会议
    第一次冲刺阶段的改进方案
    第二阶段第一次spring会议
    第七次spring会议
    第六次spring会议
    第五次spring会议
    第四次spring会议
    第三次spring会议
    第二次spring会议
    第一次spring会议
  • 原文地址:https://www.cnblogs.com/mailyuan/p/11949550.html
Copyright © 2020-2023  润新知