栈是一种遵从后进先出(LIFO,last-in-first-out)原则的有序集合。新添加的活待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
一个用来表示栈的类
class Stack {
constructor () {
this.items = []
}
/**
* *********************************************************************************
* *
* 核心方法
* *
***********************************************************************************/
// 添加一个(或几个)新元素到栈顶
push (...elements) {
for (let elem of elements) {
this.items.push(elem)
}
}
// 移除栈顶的元素,同时返回被移除的元素
pop () {
return this.items.pop()
}
/**
* *********************************************************************************
* *
* 辅助方法
* *
***********************************************************************************/
// 返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返回它)
peek () {
return this.items[this.items.length - 1]
}
// 如果栈里没有任何元素就返回true,否则返回false
isEmpty () {
return this.items.length === 0
}
// 移除栈里的所有元素
clear () {
this.items = []
}
// 返回栈里的元素个数,这个方法和数组的length属性类似
size () {
return items.length
}
// 打印栈里的所有元素
print () {
console.log(this.items.toString())
}
}
Stack类的使用
// 十进制数转化成二进制、八进制或十六进制数
function baseConverter (decNumber, base = 2) {
let remStack = new Stack()
let rem
let baseString = ''
let digits = '0123456789ABCDEF'
while (decNumber > 0) {
rem = Math.floor(decNumber % base)
remStack.push(rem)
decNumber = Math.floor(decNumber / base)
}
while (!remStack.isEmpty()) {
baseString += digits[remStack.pop()]
}
return baseString
}
参考资料
《学习JavaScript数据结构与算法》
最新评论
大哥资深网民啊,01年我还在念小学。。
看着有点难过。。。
嘿嘿,谢谢老哥,也祝老哥事业蒸蒸日上。
我是你唯一的药学类友情链接网站。 作为一个80后的过来人祝福你,生活越来越好。
这篇文章,我们中学那会老师课堂上念给我们听的。
哈哈哈哈哈,没想到啊, 我有手抄版
嗯,是的
好心办坏事多了去啦
哈哈,是的,我15年末来上海写代码了,一晃三年多过去了,好快。
今天看QQ好友的时候突然看到了你的名字,想起几年前在药品国际注册群挺活跃/厉害的你,现在不见踪影了。就搜了一下,没想到你现在转行去写代码了... (刚才打漏了一句话...)