题目描述:
输入前:(3 + 2)*(4 + 6)转化后:3 2 + 4 6 + *
我们主要用他来做什么
在1960和1970年代,逆波兰记法[1] 广泛地被用于台式计算器,因此也在普通公众(工程、商业和金融领域)中使用。
后面我们一个类似计算器的算法题和这个有关,所以我们先看看这个吧。
上述例子的示意图
步骤一

步骤二

步骤三

步骤四

步骤五

步骤六

步骤七

步骤八

步骤九

步骤十

步骤十一

主要代码
-
- (NSString *)infixToPostfix
NSString *)inputStr -
{ -
//1 -
NSMutableString *resultsStr = [@"" mutableCopy]; -
//2 -
DSStack *newStack = [[DSStack alloc] initWithSize:10]; -
//3 -
for (int i =0 ; i<inputStr.length; i++) -
{ -
unichar tempChar = [inputStr characterAtIndex:i]; -
//4 -
if ([self inputShouldNumber:[NSString stringWithCharacters:&tempChar length:1]]) -
{ -
[resultsStr appendString:[NSString stringWithCharacters:&tempChar length:1]]; -
} -
//5 -
else if ([[NSString stringWithCharacters:&tempChar length:1] isEqualToString:@"("]) -
{ -
[newStack push:[NSString stringWithCharacters:&tempChar length:1]]; -
} -
//6 -
else if ([[NSString stringWithCharacters:&tempChar length:1] isEqualToString:@")"]) -
{ -
while ([newStack sizeOfStack] > 0 && ![[newStack peek] isEqualToString:@"("]) -
{ -
[resultsStr appendString:[newStack popLastObject]]; -
} -
-
if ([newStack sizeOfStack] > 0 && ![[newStack peek] isEqualToString:@"("]) -
{ -
return @"无效的表达式"; -
} -
else -
{ -
[newStack popLastObject]; -
} -
-
} -
//7 -
else -
{ -
while ([newStack sizeOfStack] > 0 && [self operatorOfPriority:[NSString stringWithCharacters:&tempChar length:1]] <= [self operatorOfPriority:[newStack peek]]) -
{ -
[resultsStr appendString:[newStack popLastObject]]; -
} -
[newStack push:[NSString stringWithCharacters:&tempChar length:1]]; -
} -
} -
//8 -
while ([newStack sizeOfStack] > 0) -
{ -
[resultsStr appendString:[newStack popLastObject]]; -
-
} -
-
return resultsStr; -
}
代码思路描述
-
初始化一个空字符串
-
初始化一个空栈
-
读取遍历每个字符
-
如果读取的字符是数字,则拼接
-
如果读取的字符是‘(’,则进栈
-
如果读取的字符是‘)’,先把‘(’ 之前的出栈并拼接,然后这个‘(’ 再 出栈
-
如果读取的是 + ,-,,/。如果栈非空并且这个( + ,-,,/ )优先级小于等于栈顶的元素的优先级,遍历出栈并拼接,否则进栈
-
把剩下的元素一一出栈并拼接
代码链接
GithubDemo[2]
交流群昵称:ios-Swift/Object C开发上架
交流群号: 869685378 找ios马甲包开发者合作,有兴趣请添加Q 51259559
-
100天iOS数据结构与算法实战 Day01
-
100天iOS数据结构与算法实战 Day02 – 栈
-
100天iOS数据结构与算法实战 Day03 – 栈的算法实战 Valid Parentheses
4280

被折叠的 条评论
为什么被折叠?



