【问题标题】:Is there a way to dequeue from a queue and enqueue to another queue?有没有办法从队列中出列并入队到另一个队列?
【发布时间】:2019-05-12 19:32:44
【问题描述】:

大家好,我一直在研究一个使用两个队列的程序。数字流进入一个队列,然后从第一个队列出队并入队到第二个队列。

我已经尝试了所有我能想到的东西,但似乎没有任何效果,我也无法在网上找到任何东西。

【问题讨论】:

  • 您能否提供一个 MWE,以便我们了解您想要实现的目标?
  • 欢迎来到 Stack Overflow。请阅读AboutHow to Ask 页面。您需要尽最大努力,以便我们帮助您解决问题。如果您不向我们展示代码,我们无法猜测您做错了什么。队列函数的设计很重要——有很多方法可以编写队列函数的接口,而你什么也没告诉我们。这导致持怀疑态度的人认为“他们一无所有;他们只是希望我们为他们编写代码”,通常是正义的。创建一个 MCVE (minimal reproducible example) 展示您的最大努力,我们可以提供帮助。没有代码,没有帮助。
  • 我看不出有什么问题:q1.push(q2.front()); q2.pop();

标签: c pointers queue


【解决方案1】:

假设您正在对包含实际数据的 NODE 结构进行排队和出队,请考虑以下事项:

队列数据结构的出队函数应该返回出队的结构(或指向它的指针)。通过这样做,您可以简单地编写

NODE *node_dequeued_from_queue1 = Dequeue(&queue1);
Enqueue(&queue2, node_dequeued_from_queue1->data);

其中 dequeued_data 是一个节点结构,包含一个 int 类型的成员数据。

【讨论】:

  • 可能值得添加检查是否存在有效指针。据推测,在这种设计下,Dequeue() 将返回一个 NULL 指针,如果队列中没有任何东西要出队。 Enqueue() 也很可能对被告知要排队“什么都没有”感到不高兴。它还可能返回指示成功或失败的状态。
  • 我还会观察到这个问题很难回答,因为提问的人没有显示代码。一般来说,回答此类问题时要谨慎。我认为您的回答很有用,但是您必须为任何人的舒适做出太多假设(尽管我认为您大部分都做出了合理的假设-我不确定我是否会期望 ->data 在调用Enqueue(),但我可以看到它可能没问题)。
  • @JonathanLeffler 感谢您的输入,在这里检查空指针以及成功/失败标志确实是一个非常好的主意。并感谢您在没有 MWE 的情况下回答帖子的指针(双关语)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
相关资源
最近更新 更多