栈结构

119 阅读1分钟

认识栈结构

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

特点:后进先出即Last in First Out(LIFO)。

函数调用栈

封装栈结构

class Stack{
    #items = []
    push(data){
        this.#items.push(data)
    }
    pop(){
        return this.#items.pop()
    }
    peek(){
        //    return this.items[this.items.length-1]
        return this.#items.at(-1)
    }
    isEmpty(){
        return this.#items.length===0
    }
    size(){
        return this.#items.length
    }
    clear(){
        this.#items = []
    }
    toString(){
        return this.#items.join("")
    }
}

应用场景

十进制转二进制

function convert(decNumber){
  let remStack = new Stack()
  let number = decNumber
  let string = ""

  while(number>0){
    rem = number%2
    remStack.push(rem)
    number = Math.floor(number/2)
  }

  while(!remStack.isEmpty()){
    string+=remStack.pop()
  }

  return string
}

进制转换法

function convert(decNumber, type) {
  let stack = new Stack();
  let number = decNumber;
  let string = ""; // 输出结果
  let ofType = "0123456789ABCDEF";
  while (number > 0) {
    stack.push(number % type);
    number = Math.floor(number / type);
  }
  while (!stack.isEmpty()) {
    const val = stack.pop();
    console.log(val);
    string += ofType[val];
  }
  return string;
}