1 基本架构
首先我们声明两个栈和自定义队列的基本结构、功能
static class MyQueue<E> {
/**
* 首先声明两个栈
*/
public Stack stack1 = new Stack<E>();
public Stack stack2 = new Stack<E>();
/**
* 添加操作
* @param e
*/
public void push(E e) {
}
/**
* 弹出操作
* @return
*/
public E pop() {
return (E) stack2.pop();
}
}
2 实现思路
3 具体实现
接下来我们按步骤进行编码
static class MyQueue<E> {
/**
* 首先声明两个栈
*/
public Stack stack1 = new Stack<E>();
public Stack stack2 = new Stack<E>();
/**
* 添加操作
*
* @param e
*/
public void push(E e) {
//将元素压入stack1
stack1.push(e);
}
/**
* 弹出操作
*
* @return
*/
public E pop() {
//如果stack2为空,将stack1元素全部放入stack2
if (stack2.isEmpty()) {
while (!stack1.isEmpty()) {
stack2.push(stack1.pop());
}
//如果不为空,直接弹出
} else {
return (E) stack2.pop();
}
//全部为空时抛出异常
if (stack1.isEmpty() && stack2.isEmpty()) {
throw new NoSuchElementException();
}
return (E) stack2.pop();
}
}
4 测试
public static void main(String[] args) {
MyQueue<Integer> queue = new MyQueue<>();
queue.push(1);
queue.push(2);
queue.push(3);
System.out.println(queue.pop());
System.out.println(queue.pop());
queue.push(4);
queue.push(5);
System.out.println(queue.pop());
}
运行结果:
测试结果是严格按照先进先出来执行