问题描述:
如何仅用队列实现栈结构?
思路:用两个队列实现栈,当入栈时,元素只进入data队列,当出栈时,将data队列的最后一个元素保留,然后将剩下的元素倒入到help队列中,然后将data队列中唯一一个元素出队,这样就达到了出栈的效果,然后将data栈和help栈交换,这样就可以保证下一次如果用户要求再次出栈就可以重复上述过程
package code001_code010;
import java.util.LinkedList;
import java.util.Queue;
public class Code_003_QueueToStack {
public static class QueueToStack {
private Queue<Integer> data;
private Queue<Integer> help;
public QueueToStack() {
data = new LinkedList<>();
help = new LinkedList<>();
}
public void push(int obj) {
data.add(obj);
}
public int pop() {
if (data.isEmpty()) {
throw new RuntimeException("Pop failed, Stack is empty");
}
while(data.size() > 1) {
help.add(data.poll());
}
int res = data.poll();
swap();
return res;
}
public int peek() {
if (data.isEmpty()) {
throw new RuntimeException("Pop failed, Stack is empty");
}
while(data.size() > 1) {
help.add(data.poll());
}
int res = data.peek();
help.add(res);
swap();
return res;
}
public void swap() {
Queue<Integer> temp = data;
data = help;
help = temp;
}
}
}