堆栈模拟队列

需要两个堆栈, 一个负责输入, 另一个负责输出

  1. 将数据push到输入队列a中
  2. 将a中数据pop到输出队列b中
  3. pop出b中数据

image.png

  1. public static void stackToQueue(Stack<Integer> inPut){
  2. Stack<Integer> outPut = new Stack<>();
  3. while (!inPut.isEmpty()){
  4. outPut.push(inPut.pop());
  5. }
  6. while (!outPut.isEmpty()){
  7. System.out.println(outPut.pop());
  8. }
  9. }
  10. public static void main(String[] args) {
  11. Stack<Integer> stack = new Stack<>();
  12. stack.push(1);
  13. stack.push(2);
  14. stack.push(3);
  15. stack.push(4);
  16. stack.push(5);
  17. stackToQueue(stack);
  18. }

队列模拟堆栈

需要一个堆栈作为辅助列

  1. 将数据push到主队列a中
  2. 将a中数据添加到b中保留最后一位,输出4,这个过程就等于一次pop

image.png

  1. public static void main(String[] args) {
  2. Queue<Integer> master = new LinkedList<Integer>();
  3. master.add(1);
  4. master.add(2);
  5. master.add(3);
  6. master.add(4);
  7. master.add(5);
  8. popAll(master);
  9. }
  10. private static void popAll(Queue<Integer> master) {
  11. Queue<Integer> help = new LinkedList<Integer>();
  12. while (master.size() > 1) {
  13. help.add(master.poll());
  14. }
  15. System.out.println(master.poll());
  16. if (!help.isEmpty()){
  17. popAll(help);
  18. }
  19. }