当前浏览器不支持播放音乐或语音,请在微信或其他浏览器中播放
Lucky Lenka - Lucky
题目描述:
输入前:(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]
关注公众号最新动态

References
[1] 逆波兰记法: https://zh.wikipedia.org/wiki/%E9%80%86%E6%B3%A2%E5%85%B0%E8%A1%A8%E7%A4%BA%E6%B3%95 [2] GithubDemo: https://github.com/renmoqiqi/100-Days-Of-iOS-DataStructure-Algorithm/tree/master/Day04