栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
栈通常的操作:
stack() // 创建一个空的栈对象push() // 入栈操作,将元素放至栈顶pop() // 出栈操作,将栈顶元素移除并返回peek() // 返回栈顶元素,不对栈做出操作isEmpty() // 判断栈是不是为空size() // 返回栈的元素个数
使用javascript模拟栈的实现:
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() }}
用栈解决进制数转换问题:
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))