【力扣每日一题】力扣225用队列实现栈

本文介绍了如何利用两个队列(一个存储数据,一个作为缓存)在Java和C++中实现支持push、pop、top和empty操作的后入先出栈。通过反复交换队列来模拟栈的行为。
摘要由CSDN通过智能技术生成

题目来源

力扣225用队列实现栈

题目概述

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

实现 MyStack 类:

void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int top() 返回栈顶元素。 boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

思路分析

由于队列是尾入头出的,而栈的出入端都是同一端,所以我们在执行push、pop中的某一个操作时,必须先把队列中的元素清空。所以我们需要两个队列,一个用来存储数据,另一个用来实现相反操作的缓存。

代码实现

java实现

public class MyStack {

    Queue<Integer> queue;
    Queue<Integer> temp;

    public MyStack() {
        queue = new LinkedList<>();
        temp = new LinkedList<>();
    }

    public void push(int x) {
        queue.add(x);
    }

    public int pop() {
        int size = queue.size();
        for (int i = 0; i < size - 1; i++){
            temp.add(queue.poll());
        }
        int res = queue.poll();
        Queue<Integer> changeTemp = queue;
        queue = temp;
        temp = queue;
        return res;
    }

    public int top() {
        int size = queue.size();
        for (int i = 0; i < size - 1; i++){
            temp.add(queue.poll());
        }
        int res = queue.poll();
        temp.add(res);
        Queue<Integer> changeTemp = queue;
        queue = temp;
        temp = queue;
        return res;
    }

    public boolean empty() {
        return queue.size() == 0;
    }
}

c++实现

class MyStack {
private:
    queue<int> q;
    queue<int> temp;
public:

    MyStack() { }

    void push(int x) {
        q.push(x);
    }

    int pop() {
        int size = q.size();
        for (int i = 0; i < size - 1; i++) {
            temp.push(q.front());
            q.pop();
        }
        int res = q.front();
        q.pop();
        queue<int> changeTemp = temp;
        temp = q;
        q = changeTemp;
        return res;
    }

    int top() {
        int size = q.size();
        for (int i = 0; i < size - 1; i++) {
            temp.push(q.front());
            q.pop();
        }
        int res = q.front();
        temp.push(res);
        q.pop();
        queue<int> changeTemp = temp;
        temp = q;
        q = changeTemp;
        return res;
    }

    bool empty() {
        return q.empty();
    }
};
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值