中缀到后缀转换器中的堆栈问题

Posted

技术标签:

【中文标题】中缀到后缀转换器中的堆栈问题【英文标题】:Problems with stack in an infix to postfix converter 【发布时间】:2013-07-12 07:24:33 【问题描述】:

美好的一天!我正在使用堆栈实现中缀到后缀转换器。当用户输入不带括号的中缀表达式时,它起作用;但是当有括号时,控制台会说:

Exception in thread "main" StackEmptyException: Stack is empty.
    at ArrayStack.top(ArrayStack.java:85)
    at InfixToPostfix.convert(InfixToPostfix.java:54)
    at InfixToPostfix.main(InfixToPostfix.java:85)

我的问题是实现排名(堆栈顶部)。

【问题讨论】:

【参考方案1】:

啊哈!比较最顶层的排名时,您需要“查看堆栈”。因为“顶层”必须弹出元素。

尝试 stack.peek() 或等效的。对于堆栈,您实际上使用的是什么类和库? s[top] 语法无效。

回到答案#1,我开始为您编写一个peekRank() 函数,认为检查堆栈何时为空时存在问题.. 但当我看到您有一个空检查时就停止了。

不过,您似乎没有正确地窥视()顶部。


[之前的 #2 -- 不是问题]

您是否考虑过 ) 处理?你的 ( 代码似乎有一个堆栈空保护。

[之前的#1--不完全是问题]

在整个处理期间在堆栈上放置一个“ENTIRE EXPRESSION”伪标记,这样您就有一个非空堆栈,或者尽管没有周围的表达式/封闭标记,但还是回答了一个排名。

【讨论】:

我认为我正确地按下并弹出了 ( 和 ),即使没有括号,它也能正常工作。我遇到的困难是实现堆栈的顶部。 (程序假定用户正确输入了一个表达式,即适当的封闭标记)。

以上是关于中缀到后缀转换器中的堆栈问题的主要内容,如果未能解决你的问题,请参考以下文章

中缀表达式转换成后缀表达式并求值

数组模拟实现一个50个字符串的堆栈,使用堆栈,将中缀算术表达式转换成后缀表达式。

数组模拟实现一个50个字符串的堆栈,使用堆栈,将中缀算术表达式转换成后缀表达式。

数组模拟实现一个50个字符串的堆栈,使用堆栈,将中缀算术表达式转换成后缀表达式。

在 Scala 中将中缀转换为后缀表示法

如何在程序中将中缀表达式转换为后缀表达式