前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >野生前端的数据结构基础练习(1)——栈

野生前端的数据结构基础练习(1)——栈

作者头像
大史不说话
发布2018-10-09 11:54:37
4850
发布2018-10-09 11:54:37
举报
文章被收录于专栏:大史住在大前端

习题主要选自Orelly出版的《数据结构与算法javascript描述》一书。 参考代码可见:https://github.com/dashnowords/blogs/tree/master/Structure/Stack

基本练习

  1. 根据栈的特性实现一个Stack类,并在后续题目中需要用栈时使用它。
  2. 编写一个函数unitTrans(num, unit),num为一个10进制数字,unit要转换的进制数,求转换结果。
  3. 编写一个函数recursion(num),num为一个10进制数字,要求输出num!的结果。
  4. 编写一个函数palindrome(str),str是一个字符串,如果它是一个回文字符串,则返回true,否则返回false

课后习题(书中第四节习题)

  1. 一个算数表达式中有{},(),[]三种括号,编写一个函数,接受一个算数表达式作为参数,如果括号完全匹配则返回true,否则返回括号缺失的位置。
  2. 一个表达式的后缀表达式形式为opt1 opt2 operator,编写一个函数,接受一个算数表达式作为参数(平时使用的算数表达式形式即为中缀表达式),将其转换为后缀表达式(可暂不考虑运算优先级)。
  3. 盒子里从上到下放有不定数量的【红色】,【白色】,【黄色】三种糖果,编写一个程序,可以使用一个或多个栈,在保证原糖果顺序不变的情况下,取出所有的【黄色】糖果。

习题思路

  1. 按字符逐个解析表达式,遇到左括号即将其压入栈中,遇到右括号就从栈顶弹出一个元素,查看两者是否匹配,若匹配则继续,若不匹配则返回位置。需要注意的是,如果所有括号均配,则栈的最终状态需要为空。
  2. 逆向解析原表达式,将操作数操作符分别压入两个栈中,接着先从操作数栈中弹出第一个元素,在轮流从操作数栈和操作符栈中弹出元素直至栈为空即可。如果从前到后解析,则栈顶的是最后的元素,出栈时考虑到顺序即可。
  3. 只用一个额外的栈即可,将【红色】【白色】糖果压入新栈,将黄色糖果移除,当糖果盒为空后,再从新的糖果栈中逐个弹出元素重新放回糖果盒的栈即可。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基本练习
  • 课后习题(书中第四节习题)
  • 习题思路
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档