摘要:我对栈的学习因为是个新手,所以都是最简单的知识学习梳理。栈是一种遵从后进先出原则的有序集合,新添加的或者待删除的元素都保留在栈的末尾,称作栈顶,另一端叫做栈底。栈的学习栈的创建创建一个类来表示栈。对于栈来说只能用和方法来进行添加和删除元素。
我对栈的学习
因为是个新手,所以都是最简单的知识学习梳理。
什么是栈数组是计算机科学中最常用的数据结构,是数据元素的集合。有时候我们需要一种添加或者删除元素时更可控的数据结构,他们就是队列和栈。
队列是遵从先进先出(FIFO)原则的一组有序的项,队列在尾部添加新元素,并从顶部移除元素。这里不先详细说明。
栈是一种遵从后进先出(LIFO)原则的有序集合,新添加的或者待删除的元素都保留在栈的末尾,称作栈顶,另一端叫做栈底。新元素都在栈顶。
栈也被用在编译语言的编译器和内存中保存变量、方法调用等。
栈的学习栈的创建
创建一个类来表示栈。
function Stack() { //各种属性和方法的声明 }
需要一种数据结构来保存栈里的元素,这里选择数组。
var items = [];
栈的基本操作
入栈方法:添加元素到栈,这里要注意添加到栈的元素只能到栈顶,也就是栈的末尾。
this.push = function (element) { items.push(element); }
出栈方法:移除栈里的元素,注意移除的是最后添加进去的元素。
this.pop = function () { return items.pop(); }
对于栈来说只能用push和pop方法来进行添加和删除元素。
获取栈顶元素:我们想知道最后添加的元素是什么
this.peek = function () { return items[items.length - 1]; }
别忘了这里我们使用数组来存储栈内的元素
判断栈空:栈为空返回true。
this.isEmpty = function () { return items.length == 0; }
对于集合,最好是使用size来代替length,这里我们简单了。
清空栈:移除栈内的所有元素,把栈清空
this.clear = function () { items = []; //最简单的方式 }栈的使用
首先需要初始化Stack类,然后验证一下栈是否为空
var stack = new Stack(); console.log(stack.isEmpty()); //true,此时还没有添加元素
然后添加元素入栈
stack.push(8); stack.push(4);
获得最后添加的元素
console.log(stack.peek()); //4,因为4是最后被添加的元素
再添加一个元素
stack.push(11); console.log(stack.size()); //输出3,此时栈里有3个元素 console.log(stack.isEmpty()); //false,此时栈里已经有元素了
移除两个元素
stack.pop(); stack.pop(); console.log(stack.size()); //1,此时只剩下一个元素进制的转换
10进制转换为其他进制通常都是整除法。(可以自行搜索进制转换时的方法以及形式)
/** * [数字,转换成相应进制的进制数] * @param {[Number]} decNumber [想转的数] * @param {[Number]} base [想转的进制] * @return {[Number]} [转换进制后的数] */ function baseConverter (decNumber, base) { var remStack = new Stack(), rem, baseString = "", digits = "0123456789ABCDEF"; //将每次得到的进制数放入栈中 while (decNumber > 0) { rem = Math.floor(decNumber % base); remStack.push(rem); decNumber = Math.floor(decNumber / base); } //后进先出,所以出栈刚好符合进制转换的形式 while (!remStack.isEmpty()) { //这里通过digits的下标来获得相应字符。比如pop出7,这里digits[7]就是7,pop出16,这里digits[16]就是F baseString += digits[remStack.pop()]; } return baseString; } baseConverter(100345, 2); //11000011111111001 baseConverter(100345, 8); //303771 baseConverter(100345, 16); //187F9
下一篇简单的学习队列。。。。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/86920.html
摘要:栈的应用前面介绍了那么多栈相关的知识,最后也是介绍栈的应用场景的时候了,栈的实际应用非常广泛,例如用来存储访问过的任务或路径撤销的操作。 栈的定义 什么是栈?栈是一种遵循后进先出原则的有序集合,新添加的或者待删除的元素都保存在栈的同一端,称为栈顶,另一端称为栈底,在栈里,新元素靠近栈顶,旧元素靠近栈底,用个图来看大概这样式的:showImg(https://segmentfault.c...
摘要:我对字典的简单学习字典的概念集合字典和散列表都可以来存储不重复的值。字典也被称为映射。中有集合类的实现,也有字典类的实现。相关操作方法实现方法,判断某个键值是否在这个字典中,有则返回。实现方法,将字典所有的值以数组的形式返回。 我对JS字典的简单学习 字典的概念 集合、字典和散列表都可以来存储不重复的值。在集合中我们使用[值,值]来保存,在字典和散列表中使用[键,值]来存储数据。 字典...
摘要:利用存栈的方式来所有这个方法目前来看是对我直接有效的,但是实际运行过程中,会报内存泄漏的异常,原因是我的会对每一个启动时进行添加,而当我某个时,里对应的无法被,这样导致我的内存开销增加了。原文地址使用解决存栈的内存泄漏问题我的博客时空路由器 当 Android 想要退出应用时,我们总是希望完全退出。但是 Android 并没有提供一个完全退出 App 的函数。 Google 上搜索了一...
阅读 2640·2021-11-24 09:38
阅读 1954·2019-08-30 15:53
阅读 1146·2019-08-30 15:44
阅读 3186·2019-08-30 14:10
阅读 3545·2019-08-29 16:29
阅读 1765·2019-08-29 16:23
阅读 1073·2019-08-29 16:20
阅读 1438·2019-08-29 11:13