#import @interface InfixToPostfixConverter : NSObject - (NSString *)convertToPostfix:(NSString *)expression;在软件开发中,中缀表达式和后缀表达式是计算机科学中的两种常见表示方式。中缀表达式(Infix Notation)是我们日常使用的自然语言表达方式,而后缀表达式(Postfix Notation)则更适合于机器处理。将中缀表达式转换为后缀表达式的过程,通常使用一种称为“反缀化”(Shunting-yard)算法,由Edsger Dijkstra在1962年提出。以下是Objective-C实现该算法的代码示例。
#import@interface InfixToPostfixConverter : NSObject - (NSString *)convertToPostfix:(NSString *)expression; 该算法通过遍历中缀表达式的token,并使用一个栈来保存运算符。遇到运算符时,栈顶部的运算符优先级不低于当前运算符时,弹出到结果字符串中;如果优先级低于当前运算符,则将当前运算符压入栈。遇到括号时,左括号压入栈,右括号则弹出栈顶的运算符直到遇到左括号为止。最终,栈中的运算符按顺序加入结果字符串中,形成后缀表达式。
示例代码解析
@implementation InfixToPostfixConverter - (NSString *)convertToPostfix:(NSString *)expression { NSMutableString *output = [[NSMutableString alloc] init]; NSStack *stack = [[NSStack alloc] init]; // 遍历表达式中的每个字符 for (NSInteger i = 0; i < expression.length; i++) { char c = [expression characterAtIndex:i]; if (c == '(') { [stack push:@(c)]; } else if (c == ')') { while (stack.top != '(') { [output appendString:stack.pop]; } [stack pop]; // 除去左括号 } else if (c == ' ') { // 跳过空格 } else { // 遇到运算符,比较栈顶部运算符的优先级 while (!stack.empty && ![stack.top isKindOfClass:NSString]) { NSString *top = stack.top; if (isHigherPriorityOperator:top comparedTo:c) { [output appendString:stack.pop]; } else { break; } } [stack push:@(c)]; } } // 处理栈中剩余的运算符 while (!stack.empty) { [output appendString:stack.pop]; } return [output NSString]; }通过上述代码,可以实现将任意有效的中缀表达式转换为后缀表达式的功能。该算法的核心在于运算符的优先级管理和括号的处理,确保生成的后缀表达式与原始表达式的计算结果一致。

Objective-C实现statck的中缀到后缀的转换算法(附完整源码)
发布日期:2025-04-25 01:09:21
浏览次数:7
分类:精选文章
本文共 1992 字,大约阅读时间需要 6 分钟。
Objective-C实现中缀表达式到后缀表达式的转换算法
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月22日 03时53分21秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!