棧(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))