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

发布于:2024-03-05 ⋅ 阅读:(54) ⋅ 点赞:(0)

题目来源

力扣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();
    }
};
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到