JavaScript_算法与数据结构之 栈 -> Stack -> Last In First Out

295 阅读2分钟

@TOC

栈的方法

  1. push(element) :添加一个新元素到栈顶位置.
  2. pop() ∶移除栈顶的元素,同时返回被移除的元素。
  3. peek() :返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返回它)
  4. isEmpty() :如果栈里没有任何元素就返回true,否则返回false。
  5. size() :返回栈里的元素个数。这个方法和数组的length属性很类似。
  6. toString() :将栈结构的内容以字符形式返回.

栈的说明与定义

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

栈( stack ) ,它是一种受限的线性表,后进先出(LIFO) 其限制是仅允许在,表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。 LIFO(last in first out)表示就是后进入的元素,第一个弹出栈空间.类似于自动餐托盘,最后放上的托盘,往往先把拿出去使用. 向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。


简单封装的构造函数 -> 栈

function Stack () {
      // 栈中的属性
      this.items = []
      // 1. 将元素压入栈
      // this.push = function () {} // 不推荐
      Stack.prototype.push= function (element) {
        this.items.push(element)
      }
      // 2. 从栈取出元素
      Stack.prototype.pop= function () {
        return this.items.pop()
      }
      // 3. 查看一下栈顶的元素
      Stack.prototype.peek= function () {
        return this.items[this.items.length - 1]
      }
      // 4. 判断栈是否为空
      Stack.prototype.isEmpty= function () {
        return this.items.length === 0
      }
      // 5. 获取栈中元素的个数
      Stack.prototype.size= function () {
        return this.items.length
      }
      // 6. toString 方法
      Stack.prototype.toString= function () {
        return this.items.join(' ')
      }
    }

调用

    let $ = new Stack()
    $.push(20)
    $.push(10)
    $.push(100)
    $.push(1008)
    alert($)
    $.pop()
    $.pop()
    alert($)
    alert($.peek())
    alert($.isEmpty())
    alert($.size())
    console.log($.toString())
    console.log($)

src=http___img-blog.csdnimg.cn_20200723150343781.png_x-oss-process=image_watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ5MTgwMjc1,size_16,color_FFFFFF,t_70&refer=http___img-bl.jfif

十进制转二进制封装函数

 // 十进制转二进制
    function dec2bin (decNumber) {
      // 1. 定义对象 decNumber
      let stack = new Stack()
      // 2. 循环遍历
      while (decNumber > 0) {
        // 2.1. 获取余数,并放到栈里
        stack.push(decNumber % 2)
        // 2.2. 获取整除后的结果作为下次运算
        decNumber = Math.floor(decNumber / 2)
      }
      // 3. 从栈中取出0和1
      let binaryString = ''
      while (!stack.isEmpty()) {
        binaryString += stack.pop()
      }
      return binaryString
    }