c - 使用 C 中的队列评估前缀操作

标签 c algorithm queue prefix

我正在研究前缀评估的问题,我想仅使用队列来评估它们。这是我的伪代码

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 出队,然后在末尾将其入队,然后它将成为正确的前缀并进行评估,但我不希望它这样做。是否有一些前提条件来确保语法正确?

最佳答案

如果您有一个函数可以弹出队列的第一个元素而不将其出队,则可以在 else 路径中使用它并使用 while(第一个元素不是操作数)来使无效元素出队。这至少可以保证队列中的第一项是操作数。

关于c - 使用 C 中的队列评估前缀操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42918549/

相关文章:

c# - 执行 FloodFill 的不同方法

Java:使用泛型类创建整数数组的数组

gpointer 中的 char* 以奇怪的编码发送字符串

c - 结构体/构造函数/指针 - C 编程语言

c++ - 否定 remove_if 中的谓词

ios - 错误 : generic parameter 'T' could not be inferred in swift

使用 void* 的 C 队列实现 - 好的还是坏的做法?

c - 使用 fputc 和 fgetc 写入文件最终只有 0

c - 如何使此代码输出 "After swapping: 10, 5"?

c++ - 如何将 for_each 与作为重载 operator() 的函数一起使用