由于是个新手,因此都是最简单的知识学习梳理。git
数组是计算机科学中最经常使用的数据结构,是数据元素的集合。有时候咱们须要一种添加或者删除元素时更可控的数据结构,他们就是队列和栈。数组
队列是听从先进先出(FIFO)原则的一组有序的项,队列在尾部添加新元素,并从顶部移除元素。这里不先详细说明。数据结构
栈是一种听从后进先出(LIFO)原则的有序集合,新添加的或者待删除的元素都保留在栈的末尾,称做栈顶,另外一端叫作栈底。新元素都在栈顶。学习
栈也被用在编译语言的编译器和内存中保存变量、方法调用等。this
栈的建立spa
建立一个类来表示栈。code
function Stack() { //各类属性和方法的声明 }
须要一种数据结构来保存栈里的元素,这里选择数组。队列
var items = [];
栈的基本操做内存
入栈方法:添加元素到栈,这里要注意添加到栈的元素只能到栈顶,也就是栈的末尾。element
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
下一篇简单的学习队列。。。。