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

前言

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

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

流程图

QQ截图20190401105507.png

主要代码


 
  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.  

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

  35.        }

  36.  

  37.    }

  38.    return [[newStack popLastObject] intValue];

  39.  

  40. }

大致思路描述

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

  2. 按照顺序进栈。

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

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

 

 

  • 100天iOS数据结构与算法实战 Day01

  • 100天iOS数据结构与算法实战 Day02 – 栈

  • 100天iOS数据结构与算法实战 Day03 – 栈的算法实战 Valid Parentheses

  • 100天iOS数据结构与算法实战 Day04 – 栈的算法实战 逆波兰表示法

 

References

交流群昵称:ios-Swift/Object C开发上架
交流群号: 869685378   找ios马甲包开发者合作,有兴趣请添加Q 51259559

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值