摘要:栈学习数据结构与算法读书笔记。栈又名堆栈,是一种遵循后进先出原则的有序集合。新添加或待删除的元素都保存在栈的末尾,称作栈顶,另一端称作栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
栈
《学习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
摘要:错误堆栈包含了产生该错误时完整的调用栈信息。总结通过本文的描述,相信你对中的调用栈对象错误堆栈有了清晰的认识,在遇到错误的时候不在慌乱。 本文首发知乎专栏:《前端周刊》。全文共 6988 字,读完需 10 分钟,速读需 3 分钟。通过剖析 JS 中调用栈的工作机制,讲解错误抛出、处理的正确姿势,以及错误堆栈的获取、清理处理方法,希望大家对这个少有人关注但极其有用的知识点能够有所理解和掌...
摘要:调用栈的运行机制机制程序运行到一个函数,它就会将其添加到调用栈中,当从这个函数返回的时候,就会将这个函数从调用栈中删掉。在调用栈中每个调用侦都对应一个函数,最上方的调用帧称为当前帧,调用栈是由所有的调用侦形成的。 showImg(https://segmentfault.com/img/remote/1460000019244497?w=900&h=600); 调用栈的英文名叫做Cal...
摘要:在调用栈中每个调用侦都对应一个函数,最上方的调用帧称为当前帧,调用栈是由所有的调用侦形成的。我们应该在日常的中,有意识的使用的尾调用优化,来减少调用栈的长度,节省客户端内存。调用栈的英文名叫做Call Stack,大家或多或少是有听过的,但是对于js调用栈的工作方式以及如何在工作中利用这一特性,大部分人可能没有进行过更深入的研究,这块内容可以说对我们前端来说就是所谓的基础知识,咋一看好像用处...
摘要:事件循环当主线程中的任务执行完毕后,会从任务队列中获取任务一个个的放在栈中执行去执行,这个过程是循环不断的,所以整个的这种运行机制又称为事件循环。 写在前面 说起javascript(以下简称js)这门语言,相信大家已经非常熟悉了,不管是前端开发还是后端开发几乎无时无刻都要跟它打交道。虽说开发者每天几乎都要操作js,但是你真的确定你掌握了js的运行机制吗!下面我们就来聊聊这话题。 Ja...
摘要:对于栈来说,这个表尾称为栈的栈顶,相应的表头称为栈底。栈和队列的区别栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。出栈操作出栈操作就是在栈顶取出数据,栈顶指针随之下移的操作。 基本概念 栈和队列都是动态的集合,在栈中,可以去掉的元素是最近插入的哪一个。栈实现了后进先出。在队列中,可以去掉的元素总是在集合中存在的时间最长的那一个。队列实现了先进先出的策略。 栈的官...
阅读 2634·2023-04-26 02:44
阅读 6842·2021-11-22 14:44
阅读 2096·2021-09-27 13:36
阅读 2420·2021-09-08 10:43
阅读 630·2019-08-30 15:56
阅读 1373·2019-08-30 15:55
阅读 2867·2019-08-28 18:12
阅读 2816·2019-08-26 13:50