数组模拟 JavaScript数据结构之栈(Stack)存储原理

什么是栈 ?

一种后进先出(LIFO)的数据结构

在这里插入图片描述

如图所示这就好比一个单向开口的网球筒,先放入网球筒的在筒底需要最后才能拿出来。后放入球筒的先拿出来。栈的数据存储就是以这种方式实现

在这里插入图片描述

push() 入栈
pop() 出栈
peek() 查看栈顶

这几种栈的底层操作方法,我们可以依照数组的使用模拟出来,这样就很容易理解程序概念中的栈操作

数组模拟栈

因为JavaScript比较高级,自带了 push()pop()两个方法,这样理解起来变得更加容易

在这里插入图片描述

数组的push() 将数据添加到栈顶, pop() 则取出最后一项数据。模拟出栈的存入和取出操作

以下的类便是使用数组模拟出完整的栈操作

/**
 * 模拟栈创建的类
 * */
var Stack = function () {

	// 定义私有变量 外部不能操作访问,保护栈规则 
    var items = []  
    // this.items 外部可以通过实例化操作到

    // 栈的存入操作
    this.push = function (el) {
        items.push(el)
    }

    // 栈的取出操作
    this.pop = function (el) {
        return items.pop()
    }
    
    // 获取元素
    this.getItems = function () {
        return items
    }
    
    // 检查栈顶
    this.peek = function () {
        return items[items.length - 1]
    }

    // 检查是否为空栈
    this.isEmpty = function () {
        return items.length === 0
    }

    // 清空栈
    this.clear = function () {
        items = []
    }

    // 栈元素个数
    this.size = function () {
        return items.length
    }

}
使用栈操作十进制转二进制

余数法:采用连续除2纪录余数的方法,直到除数小于2。将最终结果和余数连接得出二进制数据

10/2 = 5 余 0
5/2 = 2 余 1
2/2 = 10
红字结果 :1010


/**
  *  利用封装的Stack()
  *  实现十进制转二进制
  *  利用余数法进行转换
  */
 var s = new Stack()
 var decimalToBinary = function (number) {
     while (number > 0) {
         s.push(number % 2)
         number = Math.floor(number / 2)
     }
     return getBinary()
 }

 var getBinary = function () {
     var binStr = ''
     while (!s.isEmpty()){
         binStr += s.pop()
     }
     return binStr
 }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值