返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JS表示Stack类练习用栈实现任意进制转换
  • 914
分享到

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

JS表示Stack类进制转换JS表示Stack类 2023-05-17 17:05:57 914人浏览 泡泡鱼
摘要

目录基本概念基本方法类实现应用场景练习 1:十进制数字转化为二进制练习 2:十进制数字转化为任意进制基本概念 夯下数据结构和算法基础,js 里没有栈、队列、链表巴拉巴拉明显的结构,只

基本概念

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

  • 栈是一种遵从后进先出(LIFO)原则的有序集合
  • 新添加或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底(类似,叠盘子)
  • 在栈里,新元素都靠近栈顶,旧元素都靠近栈底。

基本方法

  • push(i) 添加一个(或几个)新元素到栈顶。
  • pop() 移除栈顶的元素,同时返回被移除的元素。
  • peek() 返回栈顶的元素,不对栈做任何修改(该方法不会移除栈顶的元素,仅仅返回它)。
  • isEmpty() 如果栈里没有任何元素就返回 true,否则返回 false。
  • clear() 移除栈里的所有元素。
  • size() 返回栈里的元素个数。这个方法和数组的 length 属性很类似。

类实现

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类进制转换的资料请关注编程网其它相关文章!

--结束END--

本文标题: JS表示Stack类练习用栈实现任意进制转换

本文链接: https://lsjlt.com/news/211365.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JS表示Stack类练习用栈实现任意进制转换
    目录基本概念基本方法类实现应用场景练习 1:十进制数字转化为二进制练习 2:十进制数字转化为任意进制基本概念 夯下数据结构和算法基础,JS 里没有栈、队列、链表巴拉巴拉明显的结构,只...
    99+
    2023-05-17
    JS表示Stack类进制转换 JS表示Stack类
  • Java实现任意进制转换
    本文实例为大家分享了Java实现任意进制转换的具体代码,供大家参考,具体内容如下 问题描述 编写程序实现任意进制间的相互转换 (一)、进制转换思想 1、先把任意进制转化为十进制 2、...
    99+
    2024-04-02
  • Python实现任意进制之间的转换
      在日常生活中我们频繁使用到数学的进制,如季度逢三进一,星期逢七进一;×××、小时使用12进制,每天使用24进制,每月使用30进制,分秒使用60进制,一年使用360进制等等;在编程过程中我们经常需要转换进制,虽然Python已经内置了常...
    99+
    2023-01-31
    Python
  • C语言实现任意进制转换器
    本文实例为大家分享了C语言实现任意进制转换器的具体代码,供大家参考,具体内容如下 简单的C语言任意进制转换器 该进制转换器可进行任意进制转换,请看效果图: 代码 #include...
    99+
    2024-04-02
  • JS 实现10进制转换36进制的示例代码
    前言 我们在平时写代码的时候偶尔会碰到进制转换的问题,常见的有2进制,8进制,10进制,16进制之间的转换,但是36进制却很少听过,这里就让我们用JS来简单尝试一下36进制的实现吧...
    99+
    2024-04-02
  • Python数据结构栈实现进制转换简单示例
    栈是一种后进先出(LIFO)的数据结构,在实际生活和工作中也很常见。 比如,在餐厅里的一摞盘子,总是从上面先取,也就是最后放到上面的先被取走。再比如,浏览网页的时候,通过浏览器的回退...
    99+
    2023-02-03
    python 进制转化 数据结构进制转换算法 栈实现进制转换
  • Python和C语言利用栈分别实现进制转换
    目录问题描述C语言实现Python实现问题描述 利用栈的数据结构实现将十进制数转换成二进制数 C语言实现 顺序表的存储结构实现栈 代码: #include <stdlib.h&...
    99+
    2024-04-02
  • Oracle中通过函数实现二、八、十、十六进制任意转换
    说明:本文主要参考于: http://www.eygle.com/archives/2004/06/oracle_howto_convert.html 一、先创建两个基本的进制转换函数: &n...
    99+
    2024-04-02
  • C#实现十六进制与十进制相互转换以及及不同进制表示
    目录前言C#中数字的进制表示形式十六进制转十进制代码实现十六进制转十进制C#内置方法16转10进制Convert.ToInt32()int.Parse()和int.TryParse十...
    99+
    2024-04-02
  • 怎么使用Java实现进制转换工具类
    本文小编为大家详细介绍“怎么使用Java实现进制转换工具类”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用Java实现进制转换工具类”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。原理低进制转换到高进制的时...
    99+
    2023-07-05
  • 基于Java实现进制转换工具类的示例代码
    目录背景原理十进制A转换为N进制RN进制R转换为十进制A应用延伸背景 最近有个发送短信的功能,需要在短信中带有详情链接,链接中带有对应信息且要有校验功能,然而短信是按字数收费的,所以...
    99+
    2023-02-19
    Java进制转换工具类 Java进制转换
  • 怎么使用java进制转换工具类实现减少参数长度
    这篇“怎么使用java进制转换工具类实现减少参数长度”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用java进制转换工...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作