当前位置: 首页 > news >正文

JavaScript数据结构与算法——栈

文章目录

  • 一、初始栈结构
      • 1.1 特性
      • 1.2 注意事项
  • 二、栈结构的封装
      • 2.1 封装简单栈结构
      • 2.2 利用栈将十进制转二进制

一、初始栈结构

1.1 特性

类似于汉诺塔,后进先出,每次只能操作栈顶的元素。关键词:压栈退栈
在这里插入图片描述
简单示意图:
在这里插入图片描述

1.2 注意事项

进行递归时需要设置终止条件,否则一直往栈里面压入东西,就会造成栈溢出


二、栈结构的封装

2.1 封装简单栈结构

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><script>class Stack {// 用数组模拟栈,但是需要给数组加一下限制,用#item避免外部访问#items = [];// 压栈push(data) {this.#items.push(data);}// 弹栈pop() {return this.#items.pop();}// 查看栈顶peek() {return this.#items[this.#items.length - 1];}// 查看当前栈是否为空isEmpty() {return this.#items.length == 0;}// 查看栈大小size() {return this.#items.length;}// 清空栈clear() {this.#items = [];}// 转为字符串toString() {return this.toString().toString(",");}}let stack = new Stack();</script></body>
</html>

2.2 利用栈将十进制转二进制

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><script>class Stack {// 私有属性,避免被外部渲染#items = [];// 压栈push(data) {this.#items.push(data);}// 弹栈pop() {return this.#items.pop();}// 查看栈顶peek() {return this.#items[this.#items.length - 1];}// 查看当前栈是否为空isEmpty() {return this.#items.length == 0;}// 查看栈大小size() {return this.#items.length;}// 清空栈clear() {this.#items = [];}// 转为字符串toString() {return this.toString().toString(",");}}let stack = new Stack();// decNumber:要将那个数进行转换。base:将该数转换为几进制的数function convert(decNumber, base) {let number = decNumber;let remStack = new Stack();let string = "";let baseString = "0123456789ABCDEF";while (number > 0) {remStack.push(number % base);number = Math.floor(number / base);}while (!remStack.isEmpty()) {string += baseString[remStack.pop()];}return string;}convert(50);</script></body>
</html>
http://www.lryc.cn/news/109034.html

相关文章:

  • Elasticsearch分词详解:ES分词介绍、倒排索引介绍、分词器的作用、停用词
  • SpringMVC组件
  • 解决el-dialog弹出时,页面抖动,右侧会缩小的问题(即滚动条被遮罩层覆盖的问题)
  • 【Rust 基础篇】Rust 属性宏:定制你的代码
  • 2023-08-04力扣今日三题
  • 从HTTP代理到Socks5代理:网络安全与爬虫的进化之路
  • 数学建模-元胞自动机
  • 化学合成有机化学 | 逆合成分析软件/数据库汇总
  • 无涯教程-jQuery - Selectable选择函数
  • MySQL修改root密码
  • vue获取近七天、月份、年份的起始日和结束日
  • android AIDL 学习使用
  • 学习笔记|C251|STC32G单片机视频开发教程(冲哥)|第三集:开发环境搭建和程序下载
  • 【数据可视化】(二)数据探索组件
  • Go to Play Maimai DX 2023牛客暑期多校训练营5 G
  • HTML基础铺垫
  • 【Vue3项目实战】vue3项目基于el-menu封装左侧菜单栏组件
  • MySQL正则表达式检索数据
  • vite+ts+vue3 prettier.config.js 不生效问题解决
  • Java源码规则引擎:jvs-rules 8月新增功能介绍
  • 2023年第三届工业自动化、机器人与控制工程国际会议 | IET独立出版 | EI检索
  • 14.2.2 【Linux】software, hardware RAID
  • (学习笔记-进程管理)进程
  • 《Linux从练气到飞升》No.07 Linux第一个小程序-进度条的实现
  • 【NLP概念源和流】 04-过度到RNN(第 4/20 部分)
  • 企业上云实施路线图
  • docker系列--解决hyper-v导致docker无法启动问题
  • socket server服务器开发常见的并发模型
  • 怎么修改pdf文件中的文字?分享几种编辑方法
  • spring — Spring Security 5.7与6.0差异性对比