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