栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅容许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另外一端称为栈底。向一个栈插入新元素又称做进栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称做出栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。javascript
栈一般的操做:java
stack() // 建立一个空的栈对象 push() // 入栈操做,将元素放至栈顶 pop() // 出栈操做,将栈顶元素移除并返回 peek() // 返回栈顶元素,不对栈作出操做 isEmpty() // 判断栈是否是为空 size() // 返回栈的元素个数
使用javascript模拟栈的实现:ide
function Stack () { let items = [] this.push = function (element) { //添加一个(或几个)新元素到栈顶 items.push(element) } this.pop = function () { //移除栈顶的元素,同时返回被移除元素 return items.pop() } this.peek = function () { //返回栈顶的元素,但并不对栈作任何修改 return items[items.length - 1] } this.isEmpty = function () { // 判断栈是否是为空 return items.length === 0 } this.size = function () { // 返回栈里元素的个数 return items.length } this.clear = function () { // 移除栈里全部的元素 items = [] } this.print = function () { console.log(items.toString()) } this.toString = function () { return items.toString() } }
用栈解决进制数转换问题:this
function divide (num, base) { // num为须要转换的数, base为要转换的基数 let remStack = new Stack(), rem, remString = '' while (num > 0) { rem = Math.floor(num % base) remStack.push(rem) num = Math.floor(num / base) } while (!remStack.isEmpty()) { remString += remStack.pop() } return remString } console.log(divide(18,16))