余瑜的博客 余瑜的博客
首页
  • 并发
  • 线程池
  • spring
  • maven
  • 其他
  • redis
  • mysql
  • linux
  • zookeeper
  • docker
  • terminal
  • kong插件开发
  • 资料
  • leetCode-简单
  • blog
  • 其他
关于
GitHub (opens new window)
首页
  • 并发
  • 线程池
  • spring
  • maven
  • 其他
  • redis
  • mysql
  • linux
  • zookeeper
  • docker
  • terminal
  • kong插件开发
  • 资料
  • leetCode-简单
  • blog
  • 其他
关于
GitHub (opens new window)
  • 资料

  • leetCode-简单

    • 两数之和
    • 整数反转
    • 回文数
    • 罗马数字转整数
    • 反转链表
    • 堆栈和队列互相模拟
      • 堆栈模拟队列
      • 队列模拟堆栈
  • 算法
  • leetCode-简单
余瑜
2019-07-30
目录

堆栈和队列互相模拟

# 堆栈模拟队列

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

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

image.png

public static void stackToQueue(Stack<Integer> inPut){
    Stack<Integer> outPut = new Stack<>();
    while (!inPut.isEmpty()){
        outPut.push(inPut.pop());
    }

    while (!outPut.isEmpty()){
        System.out.println(outPut.pop());
    }
}

public static void main(String[] args) {
    Stack<Integer> stack = new Stack<>();
    stack.push(1);
    stack.push(2);
    stack.push(3);
    stack.push(4);
    stack.push(5);
    stackToQueue(stack);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 队列模拟堆栈

需要一个堆栈作为辅助列

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

image.png

public static void main(String[] args) {
    Queue<Integer> master = new LinkedList<Integer>();
    master.add(1);
    master.add(2);
    master.add(3);
    master.add(4);
    master.add(5);

    popAll(master);
}

private static void popAll(Queue<Integer> master) {
    Queue<Integer> help = new LinkedList<Integer>();
    while (master.size() > 1) {
        help.add(master.poll());
    }
    System.out.println(master.poll());
    if (!help.isEmpty()){
        popAll(help);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
上次更新: 2021/03/23, 21:01:05

← 反转链表

Theme by Vdoing | Copyright © 2018-2022 逆光世间 | 备案号: 京ICP备19016086号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式