js栈数据结构的实现与简单实现任意进制转换

JS栈与进制转换
本文介绍了如何使用JavaScript实现栈数据结构,并展示了栈在进制转换中的应用。通过具体实例,如十进制到二进制及任意进制的转换,深入浅出地解释了栈的操作原理。

js栈数据结构的实现与简单实现任意进制转换

栈(Stack)是一种遵循后进先出的原则(LIFO)的有序集合。新保存的或待删除的元素保存在栈的同一端,称作栈顶,另一端叫栈底。操作栈数据都是在栈顶操作。

在js中,可以用数组的 push()pop() 方法实现栈数据结构

实现栈数据结构

class Stack {
  stack
  constructor() {
    this.stack = []
  }
  isEmpty() {
    return this.stack.length === 0
  }
  size() {
    return this.stack.length
  }
  push(value) {
    this.stack.push(value)
  }
  pop() {
    return this.stack.pop()
  }
  peek() {
    if(this.isEmpty()) return
    return this.stack[this.stack.length-1]
  }
  clear() {
    this.stack = []
  }
  print() {
    console.log(JSON.stringify(this.stack, null, 2))
  }
}

简单应用

实现进制转换

十进制转二进制
中学数学学过,十进制转二进制,利用的是除余法。得到的余数,逆序串起来就是二进制的转换结果。

// 十进制转二进制
function divideBy2(decNumber) {
  var remStack = new akutil.Stack(),
    rem,
    binarryString = ''

  while (decNumber > 0) {
    rem = Math.floor(decNumber % 2)
    remStack.push(rem)
    decNumber = Math.floor(decNumber / 2)
  }

  while (!remStack.isEmpty()) {
    binarryString += remStack.pop().toString()
  }
  return binarryString
}
console.log('10 十进制转二进制',divideBy2(10));
console.log(divideBy2(3));
console.log(divideBy2(233));

实现任意进制转换

在十进制转二进制的基础上扩展,允许自定义除数。

// 转换任意进制
function baseConverter(decNumber, base) {
  var remStack = new akutil.Stack(),
  rem,
  baseString = '',
  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().toString()]
  }

  return baseString
}

console.log(baseConverter(3, 10)); // 3
console.log(baseConverter(11, 16)); // B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值