• 两个栈实现一个队列,两个队列实现一个栈(C++实现)


    Leetcode-232. 用栈实现队列

    请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):

    实现 MyQueue 类:

    void push(int x) 将元素 x 推到队列的末尾
    int pop() 从队列的开头移除并返回元素
    int peek() 返回队列开头的元素
    boolean empty() 如果队列为空,返回 true ;否则,返回 false

    实现思路:

    该类声明两个整型栈变量,pushst和popst

    push数据时,直接往pushst里面入。

    pop数据时,对popst栈进行判断,为空时将pushst的数据全部push到popst中,popst执行pop()操作,非空则直接popst执行pop()操作。

    代码实现:

    class MyQueue {

    public:

        MyQueue() {

         //内置类型回调用他自己的构造函数

        }

       

        void push(int x) {

            pushst.push(x);

        }

        

        int pop() {

            if(popst.empty())

            {

                while(!pushst.empty())

                {

                    popst.push(pushst.top());

                    pushst.pop();

                }

            }

            int val=popst.top();

            popst.pop();

            return val;

        }

        

        int peek() {

            if(popst.empty())

            {

                while(!pushst.empty())

                {

                    popst.push(pushst.top());

                    pushst.pop();

                }

            }

            return popst.top();

        }

        

        bool empty() {

            return pushst.empty()&&popst.empty();

        }

    private:

        stack pushst;

        stack popst;

    };



    Leetcode-

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

    实现 MyStack 类:

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

    实现思路:

    声明两个整型队列变量,q1和q2

    push数据时,往非空队列push,两个都为空,任意一个入

    pop数据时,将非空队列非队尾节点数据(size()>1)都入到空队列中,然后将非空队列队尾这个数据pop

    代码实现:

    class MyStack {

    public:

        MyStack() {

        }

        

        void push(int x) {

            if(!q2.empty())

            {

                q2.push(x);

            }

            if(!q1.empty())

            {

                q1.push(x);

            }

            if(q1.empty()&&q2.empty())//两者都为空,push到q1(q2)

            {

                q1.push(x);

            }

        }

        

        int pop() {

            if(!q1.empty())

            {

                while(q1.size()>1)

                {

                    q2.push(q1.front());

                    q1.pop();

                }

                int front=q1.front();

                q1.pop();

                return front;

            }

            else

            {

                while(q2.size()>1)

                {

                    q1.push(q2.front());

                    q2.pop();

                }

                int front=q2.front();

                q2.pop();

                return front;

            }

        }

        

        //非空队列队尾数据即是所求

        int top() {

            if(!q1.empty())

            {

                return q1.back();

            }

            else

            {

                return q2.back();

            }

        }

        

        bool empty() {

            return q1.empty()&&q2.empty();

        }

    private:

        queue q1;

        queue q2;

    };

  • 相关阅读:
    合作QA是大聪明?撸个接口校验工具保命(5)
    centos7下 编译coreboot生成真机可用的bios固件, 并在真机上演示 (上篇)
    极简组调度-CGroup如何限制cpu
    配电室管理系统:现代化电力分配的重要工具
    牛客网-《刷C语言百题》第四期
    代码模板2---基础算法(高精度/前缀和/差分)
    关于ASCII码的了解
    期权基本概念
    各种信息论坛
    SpringBoot实现读写分离
  • 原文地址:https://blog.csdn.net/qq_54717101/article/details/127938520