package com.example.demo.algorithm.D002;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
/**
* @Description :
* 如何用队列结构实现栈结构
*
* 准备两个队列
* 队列 queue 辅助队列 help
*
* 当添加的时候 添加到queue中
* 当弹出的时候 将queue的数据依次添加到help 当只有一个数据时,弹出,然后将help数组中的数据添加到queue中
*
* @Author : Darren
* @Date : 2021 年 02 月 18 日 21:50:16
* @since : 1.0
*/
public class J007_TwoQueueImplementStack {
public static void main(String[] args) {
System.out.println("begin");
TwoQueueStack<Integer> twoQueueStack = new TwoQueueStack();
Stack<Integer> stack = new Stack<>();
int testTime = 1000000;
int max = 1000000;
for (int i = 0; i < testTime; i++) {
if (twoQueueStack.isEmpty()){
if (!stack.isEmpty()){
System.out.println("oops");
}
int value = (int) (Math.random() * max);
twoQueueStack.push(value);
stack.push(value);
}else {
if (Math.random() < 0.25){
int value = (int) (Math.random() * max);
twoQueueStack.push(value);
stack.push(value);
}else if (Math.random() < 0.5){
if (!twoQueueStack.peek().equals(stack.peek())){
System.out.println("oops");
}
}else if (Math.random() < 0.75){
if (!twoQueueStack.pop().equals(stack.pop())){
System.out.println("oops");
}
}else{
if (twoQueueStack.isEmpty() != stack.isEmpty()){
System.out.println("oops");
}
}
}
}
System.out.println("end");
}
public static class TwoQueueStack<T>{
private Queue<T> queue;
private Queue<T> help;
public TwoQueueStack() {
this.queue = new LinkedList<>();
this.help = new LinkedList<>();
}
public void push(T value){
this.queue.add(value);
}
public T pop(){
//除了最后一个元素,将其他所有的元素添加到help队列中
while (queue.size() > 1){
help.offer(queue.poll());
}
T value = queue.poll();
//将help队列中的元素添加到queue队列中
Queue<T> temp = queue;
queue = help;
help = temp;
return value;
}
public T peek(){
//除了最后一个元素,将其他所有的元素添加到help队列中
while (queue.size() > 1){
help.offer(queue.poll());
}
T value = queue.poll();
//将要弹出的元素添加到help队列中
help.offer(value);
//将help队列中的元素添加到queue队列中
Queue<T> temp = queue;
queue = help;
help = temp;
return value;
}
public boolean isEmpty(){
return queue.isEmpty();
}
}
}
【知识积累】如何用队列结构实现栈结构
猜你喜欢
转载自blog.csdn.net/axin1240101543/article/details/113846266
今日推荐
周排行