资讯专栏INFORMATION COLUMN

JS 栈

Lin_R / 3341人阅读

摘要:栈学习数据结构与算法读书笔记。栈又名堆栈,是一种遵循后进先出原则的有序集合。新添加或待删除的元素都保存在栈的末尾,称作栈顶,另一端称作栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。

《学习JavaScript数据结构与算法》读书笔记。

栈(stack)又名堆栈,是一种遵循后进先出(LIFO)原则的有序集合。新添加或待删除的元素都保存在栈的末尾,称作栈顶,另一端称作栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。

就好比:一个死胡同,前面是“此路不通”,只有一个入口,如果一队人进入,只能队尾变对首出去。

JS实现栈代码(摘自《学习JavaScript数据结构与算法》):

function Stack() {

  /**
   * 用数组来模拟栈
   */
  var items = [];

  /**
   * 将元素送入栈,放置于数组的最后一位
   */
  this.push = function(element) {
    items.push(element);
  };

  /**
   * 弹出栈顶元素
   */
  this.pop = function() {
    return items.pop();
  };

  /**
   * 查看栈顶元素
   */
  this.peek = function() {
    return items[items.length - 1];
  }

  /**
   * 确定栈是否为空
   * @return {Boolean} 若栈为空则返回true,不为空则返回false
   */
  this.isAmpty = function() {
    return items.length === 0
  };

  /**
   * 清空栈中所有内容
   */
  this.clear = function() {
    items = [];
  };

  /**
   * 返回栈的长度
   * @return {Number} 栈的长度
   */
  this.size = function() {
    return items.length;
  };

  /**
   * 以字符串显示栈中所有内容
   */
  this.print = function() {
    console.log(items.toString());
  };
}

我们可以利用栈来解决十进制的转换问题,例如我们将十进制数字转为二进制,是将十进制数字不断地和2整除取余,直到整除为0。

十进制转任何进制代码(摘自《学习JavaScript数据结构与算法》):

  /**
   * decNumber 要转换的十进制数字
   * base      目标进制基数
   */
  function baseConverter(decNumber, base) {
    var remStack = new Stack(),
        rem,
        baseString = "",
        digits = "0123456789ABCDEF";
    white (decNumber > 0) {
        rem = Math.floor(decNumber % base);
        remStack.push(rem);
        decNumber = Math.floor(decNumber / base);
    }
    
    white(!remStack.isEmpty()) {
        baseString += digits[remStack.pop()];
    }
    
    return baseString;
  }
JS 基本数组操作速查
方法 描述
concat() 连接两个或更多的数组,并返回结果。
join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
pop() 删除并返回数组的最后一个元素。
push() 向数组的末尾添加一个或更多元素,并返回新的长度。
reverse() 颠倒数组中元素的顺序。
shift() 删除并返回数组的第一个元素。
slice() 从某个已有的数组返回选定的元素。
sort() 对数组的元素进行排序。
splice() 删除元素,并向数组添加新元素。可用于插入、替换
toSource() 返回该对象的源代码。
toLocaleString() 把数组转换为本地字符串,并返回结果。
ushift() 向数组的开头添加一个或更多元素,并返回新的长度。
valueOf() 返回数组对象的原始值。

附:
JavaScript数据结构和算法系列:
JS 队列-优先队列、循环队列

JavaScript设计模式系列:
JavaScript设计模式之策略模式
JavaScript设计模式之发布-订阅模式(观察者模式)-Part1

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/90882.html

相关文章

  • 你不知道的 JS 错误和调用常识

    摘要:错误堆栈包含了产生该错误时完整的调用栈信息。总结通过本文的描述,相信你对中的调用栈对象错误堆栈有了清晰的认识,在遇到错误的时候不在慌乱。 本文首发知乎专栏:《前端周刊》。全文共 6988 字,读完需 10 分钟,速读需 3 分钟。通过剖析 JS 中调用栈的工作机制,讲解错误抛出、处理的正确姿势,以及错误堆栈的获取、清理处理方法,希望大家对这个少有人关注但极其有用的知识点能够有所理解和掌...

    tainzhi 评论0 收藏0
  • js 调用机制与ES6尾调用优化介绍

    摘要:调用栈的运行机制机制程序运行到一个函数,它就会将其添加到调用栈中,当从这个函数返回的时候,就会将这个函数从调用栈中删掉。在调用栈中每个调用侦都对应一个函数,最上方的调用帧称为当前帧,调用栈是由所有的调用侦形成的。 showImg(https://segmentfault.com/img/remote/1460000019244497?w=900&h=600); 调用栈的英文名叫做Cal...

    AaronYuan 评论0 收藏0
  • JS 调用机制与 ES6 尾调用优化介绍

    摘要:在调用栈中每个调用侦都对应一个函数,最上方的调用帧称为当前帧,调用栈是由所有的调用侦形成的。我们应该在日常的中,有意识的使用的尾调用优化,来减少调用栈的长度,节省客户端内存。调用栈的英文名叫做Call Stack,大家或多或少是有听过的,但是对于js调用栈的工作方式以及如何在工作中利用这一特性,大部分人可能没有进行过更深入的研究,这块内容可以说对我们前端来说就是所谓的基础知识,咋一看好像用处...

    jemygraw 评论0 收藏0
  • JavaScript事件循环

    摘要:事件循环当主线程中的任务执行完毕后,会从任务队列中获取任务一个个的放在栈中执行去执行,这个过程是循环不断的,所以整个的这种运行机制又称为事件循环。 写在前面 说起javascript(以下简称js)这门语言,相信大家已经非常熟悉了,不管是前端开发还是后端开发几乎无时无刻都要跟它打交道。虽说开发者每天几乎都要操作js,但是你真的确定你掌握了js的运行机制吗!下面我们就来聊聊这话题。 Ja...

    Corwien 评论0 收藏0
  • js数据结构和算法(二)和队列

    摘要:对于栈来说,这个表尾称为栈的栈顶,相应的表头称为栈底。栈和队列的区别栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。出栈操作出栈操作就是在栈顶取出数据,栈顶指针随之下移的操作。 基本概念 栈和队列都是动态的集合,在栈中,可以去掉的元素是最近插入的哪一个。栈实现了后进先出。在队列中,可以去掉的元素总是在集合中存在的时间最长的那一个。队列实现了先进先出的策略。 栈的官...

    jsummer 评论0 收藏0

发表评论

0条评论

Lin_R

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<