美文网首页
JS实现栈 - 十进制转任何进制

JS实现栈 - 十进制转任何进制

作者: 小小的开发人员 | 来源:发表于2019-05-13 17:11 被阅读0次

  栈是一种遵从后进先出原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端叫做栈底。在栈里,新元素都靠近栈顶,旧元素都靠近栈底。
  让我们用JS实现一个栈:

function Stack() {
    let items = []
    this.push = function (element) {  // 添加一个(或几个)新元素到栈顶
        items.push(element)
    }
    this.pop = function (element) { // 移除栈顶的元素,同时返回被移除的元素
        return items.pop()
    }
    this.peek = function (element) { // 返回栈顶的元素,不对栈做任何修改
        return items[items.length - 1]
    }
    this.isEmpty = function (element) {// 如果栈里没有任何元素就返回true
        return items.length === 0
    }
    this.size = function () { // 返回栈里的元素个数
        return items.length
    }
    this.clear = function () { // 移除栈里的所有元素
        items = []
    }
    this.print = function () { // 字符串化
        console.log(items.toString())
    }
}

使用Stack类,十进制到二进制转换

function divideBy2 (decNumber) {
    let stack = new Stack()
    let rem // 余数
    let binaryString // 二进制字符串
    while (decNumber > 0) {
        rem = Math.floor(decNumber % 2)
        stack.push(rem)
        decNumber = Math.floor(decNumber / 2)
    }
    while (!stack.isEmpty()) {
        binaryString += stack.pop().toString()
    }
    return binaryString
}
console.log( divideBy2(10)) // 1010
console.log( divideBy2(10)) // 1111101000

我们更近一步,把十进制转化成任何进制

function baseConverter (decNumber, base) {
    let stack = new Stack()
    let rem // 余数
    let baseString = ''
    let digits = '0123456789ABCDEF' // 字母对应表,显示用
    while (decNumber > 0) {
        rem = Math.floor(decNumber % base)
        stack.push(rem)
        decNumber = Math.floor(decNumber / base)
    }
    while (!stack.isEmpty()) {
        baseString += digits[stack.pop()].toString()
    }
    return baseString
}
console.log(baseConverter(1000, 2))
console.log(baseConverter(1000, 8))
console.log(baseConverter(1000, 16))

相关文章

网友评论

      本文标题:JS实现栈 - 十进制转任何进制

      本文链接:https://www.haomeiwen.com/subject/ntrraqtx.html