📜  门| GATE-CS-2001 |第 41 题

📅  最后修改于: 2021-09-27 06:11:18             🧑  作者: Mango

实现大小为 n 的队列所需的最小大小为 n 的堆栈数是多少?
(一)一个
(二) 两个
(三)
(四) 四答案:(乙)
说明:一个队列可以用两个栈来实现。让要实现的队列为 q,用于实现 q 的堆栈为 stack1 和 stack2。 q 可以通过两种方式实现:

方法 1(通过使 enQueue 操作成本高昂)
该方法确保新进入的元素始终位于堆栈 1 的顶部,因此 deQueue 操作只是从堆栈 1 中弹出。为了将元素放在 stack1 的顶部,使用了 stack2。

enQueue(q, x)
  1) While stack1 is not empty, push everything from satck1 to stack2.
  2) Push x to stack1 (assuming size of stacks is unlimited).
  3) Push everything back to stack1.

dnQueue(q)
  1) If stack1 is empty then error
  2) Pop an item from stack1 and return it

方法 2(通过使 deQueue 操作成本高昂)
在这个方法中,在入队操作中,新元素进入stack1的顶部。在出队操作中,如果 stack2 为空,则将所有元素移动到 stack2,最后返回 stack2 的顶部。

enQueue(q,  x)
  1) Push x to stack1 (assuming size of stacks is unlimited).

deQueue(q)
  1) If both stacks are empty then error.
  2) If stack2 is empty
       While stack1 is not empty, push everything from satck1 to stack2.
  3) Pop the element from stack2 and return it.

来源:https://www.geeksforgeeks.org/queue-using-stacks/
这个问题的测验