野生前端的数据结构基础练习(1)——栈
我的github主页:https://github.com/dashnowords
我的新书上架啦,3天即登京东计算机编程语言类排行榜Top1!!!精选30+JavaScript库,从使用方式,设计原则,原理源码,周边知识等等多维度详细讲解,带你玩转前端花花世界,欢迎选购~
习题主要选自Orelly出版的《数据结构与算法javascript描述》一书。
参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/Stack
基本练习
- 根据栈的特性实现一个
Stack
类,并在后续题目中需要用栈时使用它。 - 编写一个函数
unitTrans(num, unit)
,num
为一个10进制数字,unit
要转换的进制数,求转换结果。 - 编写一个函数
recursion(num)
,num
为一个10进制数字,要求输出num!
的结果。 - 编写一个函数
palindrome(str)
,str
是一个字符串,如果它是一个回文字符串,则返回true
,否则返回false
。
课后习题(书中第四节习题)
- 一个算数表达式中有
{}
,()
,[]
三种括号,编写一个函数,接受一个算数表达式作为参数,如果括号完全匹配则返回true
,否则返回括号缺失的位置。 - 一个表达式的后缀表达式形式为opt1 opt2 operator,编写一个函数,接受一个算数表达式作为参数(平时使用的算数表达式形式即为中缀表达式),将其转换为后缀表达式(可暂不考虑运算优先级)。
- 盒子里从上到下放有不定数量的【红色】,【白色】,【黄色】三种糖果,编写一个程序,可以使用一个或多个栈,在保证原糖果顺序不变的情况下,取出所有的【黄色】糖果。
习题思路
- 按字符逐个解析表达式,遇到左括号即将其压入栈中,遇到右括号就从栈顶弹出一个元素,查看两者是否匹配,若匹配则继续,若不匹配则返回位置。需要注意的是,如果所有括号均配,则栈的最终状态需要为空。
- 逆向解析原表达式,将
操作数
和操作符
分别压入两个栈中,接着先从操作数栈中弹出第一个元素,在轮流从操作数栈和操作符栈中弹出元素直至栈为空即可。如果从前到后解析,则栈顶的是最后的元素,出栈时考虑到顺序即可。 - 只用一个额外的栈即可,将【红色】【白色】糖果压入新栈,将黄色糖果移除,当糖果盒为空后,再从新的糖果栈中逐个弹出元素重新放回糖果盒的栈即可。
分类:
数据结构
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构