JS 认识栈结构

栈结构

栈(stack),它是一种运算受限的线性表,后进先出(LIFO)

LIFO(last in first out)表示就是后进入的元素, 第一个弹出栈空间. 类似于自动餐托盘, 最后放上的托盘, 往往先把拿出去使用.

其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。

向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;

从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

栈结构的图解

 栈的操作

push(element): 添加一个新元素到栈顶位置.

pop():移除栈顶的元素,同时返回被移除的元素。

peek():返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返回它)。

isEmpty():如果栈里没有任何元素就返回true,否则返回false

clear():移除栈里的所有元素。

size():返回栈里的元素个数。这个方法和数组的length属性很类似。

代码实例:

// 栈类
function Stack() {
    // 栈中的属性
    var items = []

    // 栈相关的方法
    // 压栈操作
    this.push = function (element) {
        items.push(element)
    }

    // 出栈操作
    this.pop = function () {
        return items.pop()
    }

    // peek操作
    this.peek = function () {
        return items[items.length - 1]
    }

    // 判断栈中的元素是否为空
    this.isEmpty = function () {
        return items.length == 0
    }

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

栈结构的应用

十进制转二进制

举个例子,把十进制的数字10转化成二进制的数字,过程大概是这样

 实现的代码:

// 封装十进制转二进制的函数
function dec2bin(decNumer) {
    // 定义变量
    var stack = new Stack()
    var remainder;

    // 循环除法
    while (decNumer > 0) {
        remainder = decNumer % 2
        decNumer = Math.floor(decNumer / 2)
        stack.push(remainder)
    }

    // 将数据取出
    var binayriStrng = ""
    while (!stack.isEmpty()) {
        binayriStrng += stack.pop()
    }
    return binayriStrng
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
coderwhy 深入 Node.js 技术对于一个开发者来说是非常有价值的。Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境,其独特的非阻塞 I/O 和事件驱动特性使其在构建高性能、可扩展的网络应用程序方面具有巨大优势。 深入 Node.js 技术意味着我们要更好地了解和掌握 Node.js 平台的核心技术和生态系统。首先,我们需要熟悉 Node.js 的基本概念和原理,如事件循环、模块化、包管理和错误处理等。然后,我们可以学习和应用一些核心模块,如 fs、http、https 和 net 等,以实现文件操作、网络通信和服务器搭建等功能。 在深入学习过程中,我们还可以了解 Node.js 的异步编程模型和回调函数,以及如何利用 Promise、Async/Await 和 Generator 等实现更优雅的异步编程方式。 与此同时,我们还可以探索 Node.js 的数据库连接、数据存储和缓存等相关技术。Node.js 提供了一些流行的数据库驱动程序,如 MongoDB、MySQL 和 PostgreSQL,以便于我们方便地与数据库进行交互。此外,我们还可以学习 Redis 等缓存技术,以提高应用程序的性能和可扩展性。 另外,深入学习 Node.js 技术还涉及到 Web 开发相关的技术。我们可以学习 Express、Koa、Nest.js 等 Web 框架,以实现更高效、简洁和可维护的 Web 应用。同时,了解 HTTP、WebSocket 和 RESTful API 等网络通信协议也是非常重要的。 总之,通过深入学习 Node.js 技术,我们可以更好地理解和应用 Node.js 平台的核心特性和生态系统,提升自己在后端开发领域的技术能力,并开发高性能、可扩展的网络应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值