如何仅用队列结构实现栈结构?
1、准备两个队列:data和help
2、假设往data中push数据1、2、3、4、5,当需要poll出5时,先将1、2、3、4 add进help队列中, 在将data中的5 poll出来返回
3、然后执行swap,交换data个help性质
4、当需要pop出4时,步骤和2、3基本一致
如何仅用栈结构实现队列结构?
1、准备两个栈:stackPush和stackPop
2、假设往栈stackPush中push进五个数:1、2、3、4、5,然后需要pop出1时,先将stackPush中所有数据
全部add到stackPop中,然后stackPop通过pop出1返回
3、需要pop出2时,操作步骤与2基本一致
代码如下:
import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;
public class StackAndQueueConvert_03 {
  //两个栈实现队列结构
  public static class TwoStacksQueue {
    private Stack<Integer> stackPush;
    private Stack<Integer> stackPop;
    public TwoStacksQueue() {
      stackPush = new Stack<Integer>();
      stackPop = new Stack<Integer>();
    }
    public void push(int pushInt) {
      stackPush.push(pushInt);
    }
    public int poll() {
      if (stackPop.empty() && stackPush.empty()) {
        throw new RuntimeException("Queue is empty!");
      } else if (stackPop.empty()) {
        while (!stackPush.empty()) {
          stackPop.push(stackPush.pop());
        }
      }
      return stackPop.pop();
    }
    public int peek() {
      if (stackPop.empty() && stackPush.empty()) {
        throw new RuntimeException("Queue is empty!");
      } else if (stackPop.empty()) {
        while (!stackPush.empty()) {
          stackPop.push(stackPush.pop());
        }
      }
      return stackPop.peek();
    }
  }
  //两个队列实现栈结构
  public static class TwoQueuesStack {
    private Queue<Integer> data;
    private Queue<Integer> help;
    public TwoQueuesStack() {
      data = new LinkedList<Integer>();
      help = new LinkedList<Integer>();
    }
    public void push(int pushInt) {
      data.add(pushInt);
    }
    public int peek() {
      if (data.isEmpty()) {
        throw new RuntimeException("Stack is empty!");
      }
      while (data.size() != 1) {
        help.add(data.poll());
      }
      int res = data.poll();
      help.add(res);
      swap();
      return res;
    }
    public int pop() {
      if (data.isEmpty()) {
        throw new RuntimeException("Stack is empty!");
      }
      while (data.size() > 1) {
        help.add(data.poll());
      }
      int res = data.poll();
      swap();
      return res;
    }
    private void swap() {
      Queue<Integer> tmp = help;
      help = data;
      data = tmp;
    }
  }
}








