代码随想录算法训练营第十天|232 用栈实现队列、225 用队列实现栈

栈与队列

  1. 栈(stack):先进后出;队列(queue):先进先出
  2. 栈和队列是STL里面的两个数据结构
  3. 栈不能遍历元素,提供poppush等接口,时间复杂度都为O(1)
  4. 在SGI STL中,如果没有指定底层实现的话,栈和队列默认底层使用的是deque容器

232 用栈实现队列

题目链接:用栈实现队列

思路

首先根据提示代码可以确定:队列只有四个操作:push、pop、peek、empty。针对push操作:队列push依次,栈也push一次。针对pop操作:队列pop一次,pop的是第一个元素;栈pop一次,pop的是最后面的一个元素,因此行为逻辑不统一,需要将栈中元素翻转,翻转后再pop,就和队列pop的元素一样。针对peek操作:队列peek操作,返回的是队首元素,栈何队列相反,因此也要将栈中的元素翻转。针对empty判空操作:只有当两个栈中都没有元素时,队列中才没有元素。

cpp 复制代码
class MyQueue {
public:
    MyQueue() {

    }
    
    void push(int x) {
        stackIn.push(x);
    }
    
    int pop() {
        if(stackOut.empty()){
            while(!stackIn.empty())
            {
                stackOut.push(stackIn.top());
                stackIn.pop();
            }
        }
        int result = stackOut.top();
        stackOut.pop();
        return result;
    }
    
    int peek() {
        int result = this->pop();
        stackOut.push(result);
        return result;
    }
    
    bool empty() {
        if(stackIn.empty() && stackOut.empty()){
            return true;
        }
        return false;

    }
private:
    stack<int> stackIn;
    stack<int> stackOut;
};

225 用队列实现栈

题目链接:用队列实现栈

思路

本题目和上一题目还是有一些区别的。因为队列总是先进先出 ,你无法翻转队列中的元素。所以当栈进行pop操作时,将队列中前面的元素都添加到另一个队列中,然后pop出最后一个元素。

cpp 复制代码
class MyStack {
public:
    MyStack() {

    }
    
    void push(int x) {
        queue1.push(x);
    }
    
    int pop() {
        int size = queue1.size()-1;
        while(size--){
            queue2.push(queue1.front());
            queue1.pop();
        }
        int result = queue1.front();
        queue1.pop();
        queue1 = queue2;
        while(!queue2.empty())
        {
            queue2.pop();
        }
        return result;

    }
    
    int top() {
        int result = this->pop();
        queue1.push(result);
        return result;
    }
    
    bool empty() {
        if(queue1.empty()){
            return true;
        }
        return false;

    }
private:
    queue<int> queue1;
    queue<int> queue2;
};

参考链接:

  1. https://programmercarl.com/0232.用栈实现队列.html#算法公开课
相关推荐
小年糕是糕手15 分钟前
【C++】类和对象(二) -- 构造函数、析构函数
java·c语言·开发语言·数据结构·c++·算法·leetcode
kupeThinkPoem41 分钟前
跳表有哪些算法?
数据结构·算法
前端小L1 小时前
图论专题(二十一):并查集的“工程应用”——拔线重连,修复「连通网络」
数据结构·算法·深度优先·图论·宽度优先
88号技师1 小时前
2025年9月一区SCI-孤行尺蠖觅食优化算法Solitary Inchworm Foraging-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
前端小L1 小时前
图论专题(二十五):最小生成树(MST)——用最少的钱,连通整个世界「连接所有点的最小费用」
算法·矩阵·深度优先·图论·宽度优先
前端小L1 小时前
图论专题(二十三):并查集的“数据清洗”——解决复杂的「账户合并」
数据结构·算法·安全·深度优先·图论
CoovallyAIHub2 小时前
破局红外小目标检测:异常感知Anomaly-Aware YOLO以“俭”驭“繁”
深度学习·算法·计算机视觉
点云SLAM2 小时前
图论中邻接矩阵和邻接表详解
算法·图论·slam·邻接表·邻接矩阵·最大团·稠密图
啊董dong2 小时前
课后作业-2025年11月23号作业
数据结构·c++·算法·深度优先·noi
星释2 小时前
Rust 练习册 80:Grains与位运算
大数据·算法·rust