我正在处理前缀评估的问题,我想仅使用队列来评估它们。这是我的伪代码
while Q has more than 1 element
if the pattern operand, number, number occurs
op=dequeue(Q)
num1=dequeue(Q)
num2=dequeue(Q)
eval=evaluate(op,num1,num2)
enqueue(Q,eval)
else
elem=dequeue(Q)
enqueue(Q,elem)
我认为我的逻辑对于格式正确的前缀操作是正确的,但我不确定如何解释无效的前缀语法,例如10 + 4。
现在,我的算法会将10出列,然后在最后将它排入队列,这将成为正确的前缀并进行评估,但我不希望它。是否有一些先决条件来确保语法正确?
答案 0 :(得分:0)
如果你有一个函数来弹出队列的第一个元素而不使它出列,你可以在你的else路径中用一段时间(第一个元素而不是操作数)来使无效元素出列。这至少可以保证队列中的第一项是操作数。