实现大小为n的队列所需的最小大小为n的堆栈是多少?
(一)一个
(B)两个
(C)三
(D)四答案: (B)
说明:队列可以使用两个堆栈来实现。令要实施的队列为q,而用于实施q的堆栈为stack1和stack2。 q可以通过两种方式实现:
方法1(通过使enQueue操作变得昂贵)
此方法确保新输入的元素始终位于堆栈1的顶部,以便deQueue操作仅从stack1弹出。要将元素放在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/
这个问题的测验