&LeetCode225& 用队列实现栈

题目

使用队列实现栈的下列操作:

push(x) -- 元素 x 入栈
pop() -- 移除栈顶元素
top() -- 获取栈顶元素
empty() -- 返回栈是否为空

注意:
你只能使用队列的基本操作–也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。
你所使用的语言也许不支持队列。 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可。
你可以假设所有操作都是有效的(例如, 对一个空的栈不会调用 pop 或者 top 操作)。

来源:力扣(LeetCode

思路

首先,使用一个辅助队列,把q的元素也逆着顺序存入到辅助队列中,此时加入新元素x,再把辅助队列中的元素存回来,这样就是我们要的顺序了。当然,我们也可以直接对队列q操作,在队尾加入了新元素x后,将x前面所有的元素都按顺序取出并加到队列到末尾,这样下次就能直接取出x了,符合栈到后入先出到特性,其他三个操作也就直接调用队列的操作即可

C++代码

class MyStack {
public:
    /** Initialize your data structure here. */
    MyStack() {}
    void push(int x) 
    {
        q.push(x);
        for (int i = 0; i < q.size() - 1; ++i)
        {
            q.push(q.front());
            q.pop();
        }
    }
    int pop() 
    {
        int x = q.front();
        q.pop();
        return x;
    }
    int top() 
    {
        return q.front();
    } 
    bool empty() 
    {
        return q.empty();
    }

private:
    queue<int> q;
};
发布了51 篇原创文章 · 获赞 20 · 访问量 2077

猜你喜欢

转载自blog.csdn.net/weixin_40482465/article/details/104510533