摘要:栈学习数据结构与算法读书笔记。栈又名堆栈,是一种遵循后进先出原则的有序集合。新添加或待删除的元素都保存在栈的末尾,称作栈顶,另一端称作栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
栈
《学习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...
摘要:对于栈来说,这个表尾称为栈的栈顶,相应的表头称为栈底。栈和队列的区别栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的。出栈操作出栈操作就是在栈顶取出数据,栈顶指针随之下移的操作。 基本概念 栈和队列都是动态的集合,在栈中,可以去掉的元素是最近插入的哪一个。栈实现了后进先出。在队列中,可以去掉的元素总是在集合中存在的时间最长的那一个。队列实现了先进先出的策略。 栈的官...
阅读 2995·2023-04-26 02:44
阅读 10616·2021-11-22 14:44
阅读 2494·2021-09-27 13:36
阅读 3101·2021-09-08 10:43
阅读 1013·2019-08-30 15:56
阅读 1581·2019-08-30 15:55
阅读 3070·2019-08-28 18:12
阅读 3068·2019-08-26 13:50