栈的特性是后进先出。栈的两个主要操作,一个是出栈,一个是入栈。
队列的特性是先进先出。队列的两个主要操作,一个是队尾追加元素,一个是队首取出元素。
要用栈实现队列,那么需要两个栈,一个正式栈,一个预备栈。正式栈相当于队列,用来存储进入队列的元素;预备栈用来在取出队首元素的时候,将栈顶到栈底上一个元素进行临时存储,待取出队首元素操作完成后,再将预备栈中的元素取出放到正式栈中。
代码实现如下:
package algorithm;
import java.util.Stack;
public class QueueByStack {
public static void main(String[] args) {
MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.push(3);
System.out.println(queue.get());
System.out.println(queue.get());
}
}
class MyQueue {
Stack<Object> normalStack = new Stack<>();
Stack<Object> prepareStack = new Stack<>();
public void push(Object obj) {
normalStack.push(obj);
}
public Object get() {
while (normalStack.size() > 1) {
prepareStack.push(normalStack.pop());
}
Object pop = normalStack.pop();
while (prepareStack.size() > 0) {
normalStack.push(prepareStack.pop());
}
return pop;
}
}