leetccode 225. 用队列实现栈(两个队列模拟)

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

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

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-stack-using-queues

class MyStack {
public:
    /** Initialize your data structure here. */
    queue<int>a;
    queue<int>b;
    MyStack() {

    }

    /** Push element x onto stack. */
    void push(int x) {
        b.push(x);
        while(!a.empty()){
            int y=a.front();
            b.push(y);
            a.pop();
        }
        while(!b.empty()){
            int y=b.front();
            a.push(y);
            b.pop();
        }
    }

    /** Removes the element on top of the stack and returns that element. */
    int pop() {
        int y=a.front();
        a.pop();
        return y;
    }

    /** Get the top element. */
    int top() {
        return a.front();
    }

    /** Returns whether the stack is empty. */
    bool empty() {
        return a.empty();
    }
};

/**
 * Your MyStack object will be instantiated and called as such:
 * MyStack* obj = new MyStack();
 * obj->push(x);
 * int param_2 = obj->pop();
 * int param_3 = obj->top();
 * bool param_4 = obj->empty();
 */

原文地址:https://www.cnblogs.com/wz-archer/p/12606959.html

时间: 2024-10-17 23:18:45

leetccode 225. 用队列实现栈(两个队列模拟)的相关文章

剑指Offer面试题7(Java版):用两个栈实现队列与用两个队列实现栈

题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deletedHead,分别完成在队列尾部插入节点和在队列头部删除节点的功能. 我们通过一个具体的例子来分析该队列插入和删除元素的过程.首先插入一个元素a,不妨先把它插入到stack1,此时stack1 中的元素有{a},stack2为空.再压入两个元素b和c,还是插入到stack1中,此时stack1中的元素有{a,b,c},其中c位于栈顶,而stack2仍然为空. 这个时候,我们试着删除从队列中删除一个元素.

用两个栈实现队列和用两个队列实现栈

题目一:用两个栈实现队列,队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列的尾部插入节点和在队列的头部删除节点的功能. template <class T> class CQueue { CQueue(); ~CQueue(); void appendTail(const T& node); T deleteHead(); private: stack<T> stack1; stack<T> stack2; }; 如上

用两个栈实现一个队列,用两个队列实现一个栈,C++ STL版

不必解释了吧,这里代码应该就能说明问题了 #include <iostream> #include <stack> #include <queue> using namespace std; //Queue template<typename T> class Queue { public: void pop(void); void push(const T& t); const T& front(void); bool empty(void

Algorithm --&gt; 两个栈实现队列和两个队列实现栈

两个栈实现队列和两个队列实现栈 队列(queue)先进先出的线性表:栈(stack)先进后出的线性表. 两个栈实现队列 法一思路: s1是入栈的,s2是出栈的. 入队列:直接压入s1即可: 出队列:如果s2不为空,把s2中的栈顶元素直接弹出:否则,把s1的所有元素全部弹出压入s2中,再弹出s2的栈顶元素. 代码: #include <stack> #include <iostream> #include <cassert> using namespace std; te

【JavaSE】day05_List集合_List排序_队列和栈

1.List集合 1)有序集,可重复集.List的特点是可以像数组一样,根据下标操作元素.所以List提供了一些独有的方法. 2)常用实现类: --ArrayList:内部由数组实现,查询快. --LinkedList:内部由链表实现,增删快. 3)E get(int index) 获取指定下标对应的元素.(下标从0开始) 4)E set(int index,E e) 将给定的元素设置到指定的位置上,返回值为原位置上的元素.所以该操作是替换元素操作. 注:需在现有的元素上进行操作. 代码演示:

《面试题精选》16.双栈实现队列和双队列实现栈

题目:分别用两个栈实现一个队列,和两个队列实现一个栈 分析: 1> 两个栈实现一个队列: 首先我们还是老方法,举个少量数据的例子,从中发现规律.首先我们向其中一个栈中插入a,b,c.存入栈中的顺序就是c-b-a,此时我们如果进行dequeue操作的话,因为队列是先进先出,所以a是先出的,但如果我们直接对栈pop的话那么出来的就是c.所以我们要将栈1中的数据转移到栈2中,直到最后一个元素时则把它出栈.这样我们就完成了dequeue操作. 但是queue操作怎么办?比如我们要让e,f入队,还是跟前面

数据结构与算法之队列、栈

除了数组.链表,线性的数据结构中还有很重要的几种结构:队列.栈. 队列,一种先进先出的数据结构(FIFO),其实队列可以看成是一个两个口的管道,从一个口进,另一个口出,先进去的必定得在另一个口先出去,否则后面的都出不去:栈,一种后进先出的数据结构(LIFO),栈更像是只有一个口的管道,只有一个开口可以进出,先进去的在底部,所以必须得让后进去的先出去,它才能出去. 实现队列和栈可以用顺序存储结构,也可以用链式存储结构.这里采用的是链表来实现,同时还有用两个栈实现一个队列和用两个队列实现一个栈的算法

LeetCode225 栈&#183;用队列实现栈(C++)

题目描述: 使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的. 你所使用的语言也许不支持队列. 你可以使用 list 或者 deque(双端队列)来模拟一个队列 , 只要是标准的队列操作即可. 你可以假设所有操作都

数据结构之队列和栈

No.1 抽象数据类型栈的定义 栈是限定在队尾进行操作的线性表,因此对于栈来说,队尾有特殊意义,称为栈顶,表头端成为栈底,没有任何元素的栈称为空栈 特点: 它是线性表 这个线性表只能在栈顶操作 No.2 栈的表示 栈的先进后出原则 使用栈存储数据元素,对数据元素的存和取有严格的限定,数据按照一定的顺序存储到栈中,当需要调取栈中的数据元素时,需要将该数据元素之后进栈的数据进行弹栈,该数据元素才能从栈中取出来 栈操作数据元素的方法 入栈 数据元素用栈的数据结构存储起来,也叫压栈 出栈 将数据元素从栈

集合线性表--List之LinkedList(队列与栈)

队列和栈1. Queue 队列(Queue)是常用的数据结构,可以将队列看成特殊的线性表,队列限制了对线性表的访问方式:只能从线性表的一端添加(offer)元素,从另一端取出(poll)元素.队列遵循先进先出(FIFO First Input First Output )的原则.JDK中提供了Queue接口,同时使得LinkedList实现了该接口(选择LinkedList实现Queue的原因在于Queue经常要进行插入和删除的操作,而LinkedList在这方面效率较高).Queue提供了操作