【Leetcode】225.用队列实现栈

本文介绍了如何使用队列来实现栈的功能,详细解析了两种不同复杂度的解决方案。在弹出元素时,第一种方法需要O(n)的时间复杂度,而第二种方法则能在O(1)的时间内完成。解题过程中,特别强调了队列的两种实现方式,包括循环队列和双队列策略,对于循环队列,需要调整元素顺序;而对于双队列,只需在两个队列间切换即可实现栈操作。
摘要由CSDN通过智能技术生成

题目链接:225.用队列实现栈

关键词:队列,栈

解题思路
  • 两种思路
    • 压入元素复杂度 O ( 1 ) O(1) O(1),弹出元素复杂度 O ( n ) O(n) O(n)
      • 压入元素时,队列与栈是相同的操作
      • 弹出元素时,对于栈来说弹出的是栈顶元素,对于队列来说需要弹出的是队尾元素
    • 压入元素复杂度 O ( n ) O(n) O(n),弹出元素复杂度 O ( 1 ) O(1) O(1)
      • 压入元素时,先将新元素压入队尾,然后将它前边的所有元素弹出并压入新元素的后边,实现逆序存储
      • 弹出元素时,只要弹出队头元素即可
注意事项
  • 队列有两种实现方式
    • 使用循环队列,对于要弹出的元素,先将它前边的所有元素弹出并压入它后方,再弹出该元素
    • 使用双队列,压入元素时始终向非空队列压入,弹出时先将前方元素都压入另一队列,再弹出该元素,然后交换两个队列
class MyStack {
public:
    /** Initialize your data structure here. */
    MyStack() {
    }
    
    /** Push element x onto stack. */
    void push(int x) {
        content_queue_.push(x);
    }
    
    /** Removes the element on top of the stack and returns that element. */
    int pop() {
        for(int i = 0; i < content_queue_.size() - 1; ++i)
        {
            content_queue_.push(content_queue_.front());
            content_queue_.pop();
        }
        int temp = content_queue_.front();
        content_queue_.pop();
        return temp;
    }
    
    /** Get the top element. */
    int top() {
        return content_queue_.back();
    }
    
    /** Returns whether the stack is empty. */
    bool empty() {
        return content_queue_.empty();
    }
private:
    std::queue<int> content_queue_;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值