📅  最后修改于: 2023-12-03 15:12:41.088000             🧑  作者: Mango
这道题目来自于GATE-CS-2005考试,考察的是程序员对于数据结构的掌握程度。题目难度适中,理解清楚题意即可完成。
以下是题目的具体描述:
用两个栈实现队列,通过这两个栈实现对于队列的入队和出队操作。
栈的实现可以使用链表或者顺序存储。
要求实现两个函数:
void enQueue(int x):将元素x入队。
int deQueue():在队列不为空的情况下,将队首元素移除并返回。如果队列为空,返回-1。
我们可以分析一下这个题目:
下面是具体的代码实现。
我们可以用两个栈来实现以上思路分析的操作。
import java.util.Stack;
public class QueueUsingStacks {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void enQueue(int x) {
// 把元素按顺序插入到stack1中
stack1.push(x);
}
public int deQueue() {
// 如果stack2不为空,直接从中弹出元素
if (!stack2.isEmpty())
return stack2.pop();
// 如果stack1为空,表示队列中没有元素
if (stack1.isEmpty())
return -1;
// 把stack1中的所有元素倒入stack2中,实现队列先进先出
while (!stack1.isEmpty())
stack2.push(stack1.pop());
return stack2.pop();
}
public static void main(String[] args) {
QueueUsingStacks queue = new QueueUsingStacks();
queue.enQueue(1);
queue.enQueue(2);
queue.enQueue(3);
queue.enQueue(4);
System.out.println(queue.deQueue());
System.out.println(queue.deQueue());
queue.enQueue(5);
System.out.println(queue.deQueue());
}
}
通过以上实现,我们成功的用两个栈实现了队列操作,解决了队列先进先出的特点。这道题目考察了我们对于数据结构的掌握程度,也提高了我们对于栈和队列的理解。