第一步 通过js 实现一个栈
// 封装栈
function Stack() {
// 栈的属性
this.items = []
// 栈的相关操作
// 1. 压栈
Stack.prototype.push = function(ele) {
this.items.push(ele)
}
// 2. 从栈中取出元素
Stack.prototype.pop = function() {
return this.items.pop()
}
// 3. 查看栈顶元素
Stack.prototype.peek = function() {
return this.items[this.items.length - 1]
}
// 4. 判断栈是否为空
Stack.prototype.isEmpty = function() {
return this.items.length === 0
}
// 5. 或者栈中元素的数量
Stack.prototype.length = function() {
return this.items.length
}
// 6. toString方法
Stack.prototype.toString = function() {
// return this.items.toString()
var resString = ''
this.items.forEach( i => {
resString += i + ' '
} )
return resString
}
}
第二步 通过栈的形式 实现十进制转二进制
// 函数: 将十进制转二进制
function dec2bin(decNumber) {
// 不是数字返回 Err
if(isNaN(decNumber)) throw('decNumber must a number' )
if(decNumber === 0) return '0'
// 取绝对值, 用来处理负数
var absDecNumber = Math.abs(decNumber)
// 1. 定义栈对象
var stack = new Stack()
// 2.循环操作
while(absDecNumber > 0) {
// 2.1 获取余数 压入栈中
stack.push(absDecNumber % 2)
// 2.2 获取整除后的余数结果,作为下一次允许的数字
absDecNumber = Math.floor(absDecNumber / 2)
}
// 3. 从栈中取出 0 和 1
var binaryString = decNumber < 0 ? '-' : ''
while(!stack.isEmpty()) {
binaryString += stack.pop()
}
return binaryString
}