文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JS表示Stack类练习用栈实现任意进制转换

2023-05-17 17:47

关注

基本概念

夯下数据结构和算法基础,JS 里没有栈、队列、链表巴拉巴拉明显的结构,只能用类去伪造,不然做算法题真的费劲。
先造最简单的栈类吧,这边底层使用数组,当然有空的话,你也可以试试对象。

基本方法

类实现

class Stack {
  stack: any[];
  constructor() {
    this.stack = [];
  }
  size() {
    return this.stack.length;
  }
  peek() {
    return this.stack[this.stack.length - 1];
  }
  push(value: any) {
    this.stack.push(value);
  }
  pop() {
    return this.stack.pop();
  }
  isEmpty() {
    return this.size() === 0;
  }
  clear() {
    this.stack = [];
  }
}

可以头上顶个注释,就容易调用方法了


应用场景

栈的应用场景:浏览器的历史记录、存储访问过的任务、撤销的操作等等。

练习 1:十进制数字转化为二进制

十进制数字转化为二进制的逻辑是:

关键逻辑:用十进制数除以 2,得到的余数存入栈中,得到的商(迭代)继续除以 2, 得到的余数再继续存入栈中(循环),直到商为 0 为止(终止条件)。

function toBinary(decNumber: number) {
  const s = new Stack();
  // 迭代指针,每次得到的商,初始是原始值
  let p = decNumber;
  // 商不为0 就一直循环
  while (p !== 0) {
    // 余数进栈
    s.push(p % 2);
    // 迭代
    p = Math.floor(p / 2);
  }
  let result = '';
  // 数字出栈,拼接,直至栈为空
  while (!s.isEmpty()) {
    result += s.pop();
  }
  return result;
}

加上注释的话


练习 2:十进制数字转化为任意进制

转化逻辑和上面的二进制大同小异,但这里有个限制,任意进制的范围是 2-36,然后超过 10 就是ABCD....,注意下这里就行

function toBaseConverter(decNumber: number, base: number) {
  // 范围限定
  if (base < 2 || base > 36) throw new Error('base must between 2 and 36');
  const s = new Stack();
  let p = decNumber;
  // 加了这行,超过10的表示
  const baseStr = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  while (p !== 0) {
    // s.push(p % 2) 换下,因为有字母,所以这样写法,没有字母的话p % base就够用
    s.push(baseStr[p % base]);
    // p = Math.floor(p / 2) 的2换成base
    p = Math.floor(p / base);
  }
  let result = '';
  while (!s.isEmpty()) {
    result += s.pop();
  }
  return result;
}

加上注释的话


引用

以上就是JS表示Stack类练习用栈实现任意进制转换的详细内容,更多关于JS表示Stack类进制转换的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯