栈实现队列
可以准备两个栈,栈A和栈B。栈A进行入栈操作。出栈时,判断栈B是否为空,为空就将栈A的元素遍历取出,放入栈B。此时栈B顶端元素就是最先进来的元素,此时peek和pop操作就在栈B进行。判断整体队列是否为空,两个栈同时判断是否为空,代码如下
public class StackToQueue {
Deque<Integer> inStack = new LinkedList<>();
Deque<Integer> outStack = new LinkedList<>();
public void push(int data){
inStack.push(data);
}
public int pop(){
if (outStack.isEmpty()){
intToOut();
}
return outStack.pop();
}
public int peek(){
if (outStack.isEmpty()){
intToOut();
}
return outStack.peek();
}
public boolean empty(){
return inStack.isEmpty() && outStack.isEmpty();
}
public void intToOut(){
while (!inStack.isEmpty()){
outStack.push(inStack.pop());
}
}
public static void main(String[] args) {
StackToQueue stackToQueue = new StackToQueue();
stackToQueue.push(2);
stackToQueue.push(3);
stackToQueue.push(4);
stackToQueue.push(5);
System.out.println(stackToQueue.peek());
stackToQueue.pop();
System.out.println(stackToQueue.peek());
stackToQueue.pop();
System.out.println(stackToQueue.peek());
System.out.println(stackToQueue.empty());
}
队列实现栈
队列实现栈,创建两个队列queue1和queue2,queue1时主要存储数据元素的队列,queue2时辅助队列。添加元素时,将元素添加到queue2,然后再将queue1所有元素添加到queue2,最后queue1和queue2相互交换。此时,最新添加的元素就在queue1的队列头部,实现栈的结构。代码如下:
public class QueueToStack {
Queue<Integer> queue1 = new LinkedList<>();
Queue<Integer> queue2 = new LinkedList<>();
public void push(int data){
queue2.add(data);
while (!queue1.isEmpty()){
queue2.add(queue1.poll());
}
Queue<Integer> tempQueue = queue1;
queue1 = queue2;
queue2 = tempQueue;
}
public int peek(){
return queue1.peek();
}
public int pop(){
return queue1.poll();
}
public boolean empty(){
return queue1.isEmpty();
}
public static void main(String[] args) {
QueueToStack queueToStack = new QueueToStack();
queueToStack.push(1);
queueToStack.push(2);
queueToStack.push(3);
System.out.println(queueToStack.peek());
queueToStack.pop();
System.out.println(queueToStack.peek());
}
}