LeetCode225. 用队列实现栈 (队列的应用)

力扣

 

解题思路:

1.使用两个队列queue1 , queue2 用于互相挪动数据。

2.push 的时候找到一个非空的 queue , push数据 ,如果两个都为空 ,任意一个进行push。

3.pop 的时候由于队列是先进先出 , 我们要把最后一个数据的前面的数据挪到另一个队列中,于是要找到一个 空 队列,进行挪数据, 直到剩余最后一个数据 ,进行返回。

4.top 的时候返回非空队列的最后一个元素 ,queue.pack()

5.empty 只有两个队列都为空的时候 才为空。

class MyStack {
public:
    queue<int> queue1; 
    queue<int> queue2;  

    
    MyStack() {

    }

   
    void push(int x) 
    {
        if(queue1.empty())
        {
            queue2.push(x);
        }
        else
        { 
            queue1.push(x);
        }

       
    }
    
    
    int pop() 
    {
        queue<int>* Empty = &queue1;
        queue<int>* nEmpty = &queue2;
        if(!Empty->empty())
        {
           swap(Empty,nEmpty);
        }

        while(nEmpty->size() > 1)
        {
            Empty->push(nEmpty->front());
            nEmpty->pop();
        }

        int top = nEmpty->front();
        nEmpty->pop();

        return top;
    }
    
   
    int top() 
    {
        if(queue1.empty())
        {
            return queue2.back();
        }
        else
        { 
            return queue1.back();
        }

    }
    

    bool empty() 
    {
        return queue1.empty() && queue2.empty();
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值