【发布时间】:2017-03-19 06:25:00
【问题描述】:
我需要使用队列(而不是堆栈)评估前缀。例如:
+ 3 * 2 1
is equivalent to 3+(2*1) = 5.
我正在考虑使用 dequeue 和 enqueue 一遍又一遍地循环队列。如果找到模式 "operator" + "number" + "number",则出队 3 次并将结果入队,直到队列中只剩下一个数字。
while size(q)>1
if elements are in this pattern: an operator is followed by 2 numbers.
operator <--dequeue(q);
number1 <--dequeue(q);
number2 <--dequeue(q);
int a = apply(operator, number1, number2 );
enqueue (q, a);
else if the element is a number or operator:
element <-- dequeue(q);
enqueue (q, element);
return dequeue(q);
我的算法有两个问题:
- 运算符和号码是两种不同的类型,需要保存在一个队列中。如何在 int 队列中保存“+”?
- 2 3 + 是无效输入,但最终会返回 5。2 和 3 会向右排队,变成 + 2 3。如果输入无效,我该如何防止呢?
非常感谢
【问题讨论】: