100天iOS数据结构与算法实战 Day05 - 栈的算法实战 Evaluate Reverse Polish Nota

2019 年 4 月 13 日 CocoaChina

前言

Day04介绍了Reverse Polish Notation,主要是为了方便用栈这个结构计算数学表达式。复习下:

输入前:(3 + 2)*(4 + 6) 转化后:3 2 + 4 6 + * 结果:50

流程图

主要代码

  
  
    
  1. - (int)evaluateRPN:(NSString *)inputStr

  2. {

  3. DSStack *newStack = [[DSStack alloc] initWithSize:10];

  4. for (int i =0 ; i<inputStr.length; i++)

  5. {

  6. unichar tempChar = [inputStr characterAtIndex:i];

  7. if ([[NSString stringWithCharacters:&tempChar length:1] isEqualToString:@"*"])

  8. {

  9. NSNumber *a = [newStack popLastObject];

  10. NSNumber *b = [newStack popLastObject];

  11. [newStack push:[NSNumber numberWithInt:([a intValue]*[b intValue])]];

  12. }

  13. else if ([[NSString stringWithCharacters:&tempChar length:1] isEqualToString:@"/"])

  14. {

  15. NSNumber *a = [newStack popLastObject];

  16. NSNumber *b = [newStack popLastObject];

  17. [newStack push:[NSNumber numberWithInt:([a intValue]/[b intValue])]];

  18. }

  19. else if ([[NSString stringWithCharacters:&tempChar length:1] isEqualToString:@"+"])

  20. {

  21. NSNumber *a = [newStack popLastObject];

  22. NSNumber *b = [newStack popLastObject];

  23. [newStack push:[NSNumber numberWithInt:([a intValue]+[b intValue])]];

  24. }

  25. else if ([[NSString stringWithCharacters:&tempChar length:1] isEqualToString:@"-"])

  26. {

  27. NSNumber *a = [newStack popLastObject];

  28. NSNumber *b = [newStack popLastObject];

  29. [newStack push:[NSNumber numberWithInt:([a intValue]-[b intValue])]];

  30. }

  31. else

  32. {


  33. [newStack push:[NSNumber numberWithInt:[[NSString stringWithCharacters:&tempChar length:1] intValue]]];

  34. }


  35. }

  36. return [[newStack popLastObject] intValue];


  37. }

大致思路描述

  1. 把中缀表达式转化为Reverse Polish Notation。

  2. 按照顺序进栈。

  3. 当进栈的元素是 ( + - * / )四个运算符,则弹出栈顶两个元素并计算,并且把结果入栈。

  4. 最终栈只剩下一个元素,这个元素就是最后的值。

GitHubDemo

GitHub链接[1]    

References

[1] GithubDemo: https://github.com/renmoqiqi/100-Days-Of-iOS-DataStructure-Algorithm/tree/master/Day05



作者:人魔七七

链接:https://mp.weixin.qq.com/s/ZagroXeNb49YHtx8sD4yaA


本公众号转载内容已尽可能注明出处,如未能核实来源或转发内容图片有权利瑕疵的,请及时联系本公众号进行修改或删除【联系方式QQ : 3442093904  邮箱:support@cocoachina.com】。文章内容为作者独立观点,不代表本公众号立场。版权归原作者所有,如申请授权请联系作者,因文章侵权本公众号不承担任何法律及连带责任。

---END---

登录查看更多
0

相关内容

iOS 是苹果公司为其移动产品开发的操作系统。它主要给 iPhone、iPod touch、iPad 以及 Apple TV 使用。原本这个系统名为 iPhone OS,直到2010年6月7日 WWDC 大会上宣布改名为 iOS。
自动结构变分推理,Automatic structured variational inference
专知会员服务
38+阅读 · 2020年2月10日
机器学习入门的经验与建议
专知会员服务
89+阅读 · 2019年10月10日
GitHub 热门:Python 算法大全,Star 超过 2 万
Python开发者
9+阅读 · 2019年4月27日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
图解机器学习的常见算法
机器学习算法与Python学习
5+阅读 · 2018年4月2日
免费|机器学习算法Python实现
全球人工智能
5+阅读 · 2018年1月2日
动手写机器学习算法:异常检测 Anomaly Detection
七月在线实验室
11+阅读 · 2017年12月8日
动手写机器学习算法:K-Means聚类算法
七月在线实验室
5+阅读 · 2017年12月6日
机器学习(26)之K-Means实战与调优详解
机器学习算法与Python学习
4+阅读 · 2017年11月19日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
Spark机器学习:矩阵及推荐算法
LibRec智能推荐
15+阅读 · 2017年8月3日
TResNet: High Performance GPU-Dedicated Architecture
Arxiv
7+阅读 · 2020年3月30日
Arxiv
6+阅读 · 2018年8月27日
Arxiv
3+阅读 · 2018年2月24日
Arxiv
5+阅读 · 2017年12月14日
VIP会员
相关资讯
GitHub 热门:Python 算法大全,Star 超过 2 万
Python开发者
9+阅读 · 2019年4月27日
实战 | 用Python做图像处理(三)
七月在线实验室
15+阅读 · 2018年5月29日
实战 | 用Python做图像处理(二)
七月在线实验室
17+阅读 · 2018年5月25日
图解机器学习的常见算法
机器学习算法与Python学习
5+阅读 · 2018年4月2日
免费|机器学习算法Python实现
全球人工智能
5+阅读 · 2018年1月2日
动手写机器学习算法:异常检测 Anomaly Detection
七月在线实验室
11+阅读 · 2017年12月8日
动手写机器学习算法:K-Means聚类算法
七月在线实验室
5+阅读 · 2017年12月6日
机器学习(26)之K-Means实战与调优详解
机器学习算法与Python学习
4+阅读 · 2017年11月19日
Python3爬虫之入门和正则表达式
全球人工智能
7+阅读 · 2017年10月9日
Spark机器学习:矩阵及推荐算法
LibRec智能推荐
15+阅读 · 2017年8月3日
Top
微信扫码咨询专知VIP会员