用队列实现栈(JAVA)

仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(pushtoppopempty)。

实现 MyStack 类:

  • void push(int x) 将元素 x 压入栈顶。
  • int pop() 移除并返回栈顶元素。
  • int top() 返回栈顶元素。
  • boolean empty() 如果栈是空的,返回 true ;否则,返回 false
java 复制代码
class MyStack {
    private Queue<Integer> q1;
    private Queue<Integer> q2;

    public MyStack() {
        q1 = new LinkedList<>();
        q2 = new LinkedList<>();
    }
    
    public void push(int x) {
       
        if(!q1.isEmpty()) {
            q1.offer(x);
        }else {
            q2.offer(x);
        }
    }
    
    public int pop() {
        if(empty()) {
            return -1;
        }
//找到不为空的队列,转移size-1个元素
        if(!q1.isEmpty()) {
            int size = q1.size();
            for(int i = 0; i < size - 1; i++) {
                q2.offer(q1.poll());
            }
            return q1.poll();
        }else {
            int size = q2.size();
            for(int i = 0; i < size - 1; i++) {
                q1.offer(q2.poll());
            }
            return q2.poll();
        }
    }
    
    public int top() {
        if(empty()) {
            return -1;
        }//"出栈"时出不为空的队列,出size-1个元素,剩下的元素就是要出栈的元素
        if(!q1.isEmpty()) {
            int size = q1.size();
            int tmp = -1;
            for(int i = 0; i < size; i++) {
                tmp = q1.poll();
                q2.offer(tmp);
            }
            return tmp;
        }else {
            int size = q2.size();
            int tmp = -1;
            for(int i = 0; i < size; i++) {
                tmp = q2.poll();
                q1.offer(tmp);
            }
            return tmp;
        }
    }
    
    public boolean empty() {
        return q1.isEmpty() && q2.isEmpty();
    }
}
相关推荐
go54631584651 分钟前
简单的 Python 示例,用于生成电影解说视频的第一人称独白解说文案
开发语言·python
YueiL5 分钟前
OpenCV 颜色空间:原理与操作指南
python·opencv
旧厂街小江5 分钟前
LeetCode 第63题:不同路径 II
算法·程序员·架构
Java中文社群6 分钟前
面试官:你项目是如何保证高可用的?
java·后端·面试
不修×蝙蝠12 分钟前
SpringBoot(一)--搭建架构5种方法
java·spring boot·架构·配置·搭建
写代码的橘子n19 分钟前
unordered_set 的常用函数
数据结构·算法·哈希算法
EnigmaCoder30 分钟前
蓝桥杯刷题周计划(第二周)
学习·算法·蓝桥杯
黑金IT34 分钟前
深入理解人脸特征向量及图片转换方法与开发架构
算法·架构
HP-Patience1 小时前
决策树 vs 神经网络:何时使用?
神经网络·算法·决策树
AI很强1 小时前
matlab常见的配图代码实现1
开发语言·算法·matlab