【发布时间】:2015-09-16 03:26:25
【问题描述】:
我正在用 C 语言创建一个程序,该程序通过堆栈实现使用反向抛光算法将中缀形式的表达式转换为后缀形式。但是,我在如何放置与堆栈最顶层元素具有相同优先级的传入令牌时遇到问题。例如,给定中缀形式:(a+b-c/d+e^f^2),后缀形式应该是:ab+cd/-ef2^^+。但是,我的程序输出:ab+cd/-ef^2^+。我认为问题在于我的这部分代码:
while(priority(token) <= priority(top_elem(&S)) && !isStackEmpty(&S)){
x = POP(&S);
printf("%c", x);
}
PUSH(&S, token);
顺便说一下,这部分只对运算符标记('+'、'-'、''、'/'、'^)和左括号执行。优先级函数为左括号返回 0,为“+”和“-”返回 1,为“”和“/”返回 2,为“^”返回 3。
我想知道我应该在我的程序中进行哪些更改。不过,对于其他输入,它执行得很好。
【问题讨论】:
-
为了可读性和分隔标记,您强烈应该在元素之间添加空格。考虑
12+:是1 2 +还是12 +? -
我正在制作的程序中的操作数仅限于数字0-9和单个字母。
-
这仍然是一个好主意,用于调试。这真的很容易:只需在每个输出标记后打印一个空格(行尾的那个无关紧要)。
标签: c stack operator-precedence