Leetcode 232. 用栈实现队列

文章介绍了如何使用两个栈(stIn和stOut)在C++中实现一个队列(MyQueue),支持push(入队)、pop(出队)、peek(查看队首)和empty(判断是否为空)操作,利用栈的后进先出特性模拟队列的先进先出特性。
摘要由CSDN通过智能技术生成

题源:Leetcode 232. 用栈实现队列

队列是一种先进先出(FIFO)的数据结构,而栈是后进先出(LIFO)。这里的关键思路是使用两个栈来模拟队列的操作,从而使得元素的入队和出队操作符合队列的特性。下面是各个函数的具体作用和实现思路:

push(int x)

  • 这个函数用于在队列末尾添加一个元素。由于 stIn 用于输入,所以直接将元素 x 推入 stIn 栈。

pop()

  • 这个函数用于移除队列的第一个元素。实现逻辑如下:
    1. 如果 stOut 栈为空,那么将 stIn 栈中的所有元素依次弹出并推入 stOut 栈。由于栈是后进先出,当从 stIn 转移到 stOut 时,元素的顺序将被反转,从而实现了队列的先进先出顺序。
    2. 弹出并返回 stOut 栈顶元素,这个元素是队列中最先添加的元素。

peek()

  • 这个函数用于查看队列的第一个元素,但不从队列中移除它。实现步骤如下:
    1. 调用 pop() 函数弹出队列的第一个元素,并将其存储在 res 变量中。
    2. 立即将 res 再次推回到 stOut 栈,因为 pop() 实际上已经移除了元素。
    3. 返回 res

empty()

  • 这个函数用于判断队列是否为空。实现方法是检查两个栈 stInstOut 是否都为空。只有当两个栈都为空时,队列才真正为空。

通过这种方式,MyQueue 类有效地利用两个栈实现了一个队列的基本操作,包括入队(push)、出队(pop)、查看队首元素(peek)以及判断队列是否为空(empty)。

class MyQueue {
public:
    stack<int> stIn;
    stack<int> stOut;
    
    void push(int x) {
        stIn.push(x);
    }
    
    int pop() {
        if(stOut.empty())
            while(!stIn.empty()){
                stOut.push(stIn.top());
                stIn.pop();
            }
        int res = stOut.top();
        stOut.pop();
        return res;
    }
    
    int peek() {
        int res = this -> pop();
        //this 是一个在 C++(以及其他面向对象编程语言中)特殊的关键字
        //用于在类的成员函数内部指向调用该函数的对象的指针
        //简单来说,this 指针允许类的一个对象访问它自己的成员(变量和函数)
        stOut.push(res);
        return res;
    }
    
    bool empty() {
        return stIn.empty() && stOut.empty();
    }
};
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值