rokevin
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
移动
前端
语言
  • 基础

    • Linux
    • 实施
    • 版本构建
  • 应用

    • WEB服务器
    • 数据库
  • 资讯

    • 工具
    • 部署
开放平台
产品设计
  • 人工智能
  • 云计算
计算机
其它
GitHub
  • 栈

[[[toc]]]

栈

两个栈实现队列(push、pop、count)

思路:

  • 栈1:专门用来入队
  • 栈2:专门用来出队
  • 出队时如果栈2为空,就把栈1全部倒入栈2,保证顺序变成队列 FIFO
import java.util.Stack;

// 两个栈实现队列
class MyQueue {
    private Stack<Integer> stackIn;  // 入队栈
    private Stack<Integer> stackOut; // 出队栈

    public MyQueue() {
        stackIn = new Stack<>();
        stackOut = new Stack<>();
    }

    // 入队
    public void push(int val) {
        stackIn.push(val);
    }

    // 出队
    public int pop() {
        // 如果出队栈为空,把入队栈全部倒过来
        if (stackOut.isEmpty()) {
            while (!stackIn.isEmpty()) {
                stackOut.push(stackIn.pop());
            }
        }
        return stackOut.pop();
    }

    // 元素个数
    public int count() {
        return stackIn.size() + stackOut.size();
    }
}

// 测试
public class Main {
    public static void main(String[] args) {
        MyQueue queue = new MyQueue();
        queue.push(1);
        queue.push(2);
        queue.push(3);
        
        System.out.println(queue.pop());   // 1
        System.out.println(queue.count()); // 2
        System.out.println(queue.pop());   // 2
        System.out.println(queue.count()); // 1
    }
}