将队列和堆栈复制到一起

时间:2014-12-16 14:18:45

标签: java algorithm stack queue

我想使用空堆栈S来检查队列Q是否包含元素x,因此我的解决方案是将Q的元素复制到S并检查是否包含x,但是我还要求返回S元素再次进入Q,因为它原来是必须使用Q和S而没有任何其他SL阵列,所以我写了这个算法:

Boolean found ← false
int element ←  0
While(Q is not empty) 

  element ← Q.dequeue()
  if(element equal x)
           found ← true
  S.push(element)

While(S is not empty)
 ( elements back to Q) ?

坚持到最后一步,如果我使用Q.enqueue(S.pop)那么Q中元素的顺序将被颠倒

4 个答案:

答案 0 :(得分:1)

  

如果我使用Q.enqueue(S.pop)那么Q中元素的顺序将被颠倒

没错,它会被颠倒过来。您可以通过观察再次运行相同的循环来获得原有订单,从而发挥优势。

如果您创建一个执行搜索的方法,并且让队列处于反转状态,则可以避免两次写入相同的循环。您可以调用两次搜索方法,并忽略第二个返回值。

答案 1 :(得分:1)

这感觉就像是一个硬件问题,所以我不会为你解决它,但我会给你一个提示 - 当你将一个队列出列到一个堆栈然后将堆栈出队回队列时会发生什么? / p>

如何使用该现象恢复原始队列?

答案 2 :(得分:1)

正确,订单将被撤销。 这意味着如果你再次重复算法(全部为S并返回Q),你将再次反转它,这意味着你将回到元素的原始顺序,这就是你想要的。

答案 3 :(得分:0)

我不确定java默认队列是如何工作的。

  1. 从队列末尾删除元素。
  2. 检查该元素是否为x,如果是,则返回true。
  3. 否则,将其推入堆栈
  4. 重复直到找到x或所有队列为空。
  5. 完成后,从堆栈中逐个弹出元素,并在每次队列的开头添加它们,堆栈中的最后一个元素将成为队列中的第一个元素。因此,您维持订单。