首页 > 编程语言 >代码随想录算法训练营第10天 | 栈和队列

代码随想录算法训练营第10天 | 栈和队列

时间:2024-03-31 15:44:06浏览次数:25  
标签:10 return int 训练营 随想录 pop que1 stack empty

理论基础

  • 栈和队列是STL(C++标准库)里面的两个数据结构
  • STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)
  • 栈的内部结构,栈的底层实现可以是vector,deque,list 都是可以的, 主要就是数组和链表的底层实现
  • 我们常用的SGI STL,如果没有指定底层实现的话,默认是以deque为缺省情况下栈的底层结构
    • deque是一个双向队列,只要封住一段,只开通另一端就可以实现栈的逻辑了
    • SGI STL中 队列底层实现缺省情况下一样使用deque实现的
    • 我们也可以指定vector为栈的底层实现,初始化语句如下
      std::stack<int, std::vector<int> > third; // 使用vector为底层容器的栈
      std::queue<int, std::list<int>> third; // 定义以list为底层容器的队列
  • 栈和队列不允许遍历,不提供迭代器

232.用栈实现队列

stack用法
一个栈输入,一个栈输出

class MyQueue {
public:
    MyQueue() {

    }

    void push(int x) {
        stIn.push(x);
    }

    int pop() {
        if(stOut.empty()) {
            while (!stIn.empty()) {
                stOut.push(stIn.top());
                stIn.pop();
            }
        }

        int result = stOut.top();
        stOut.pop();  //此pop()不返回值
        return result;
    }

    int peek() {
        if (stOut.empty()) {
            while (!stIn.empty()) {
                stOut.push(stIn.top());
                stIn.pop();
            }
        }

        return stOut.top();

        //int res = this->pop(); // 直接使用已有的pop函数
        //stOut.push(res); // 因为pop函数弹出了元素res,所以再添加回去
        //return res;
    }

    bool empty() {
        if (stOut.empty() && stIn.empty())
            return true;
        else
            return false;
    }

private:
    stack<int> stIn;
    stack<int> stOut;

};

225. 用队列实现栈

queue用法

  • 两个队列:其中一个队列用来暂时存放
class MyStack {
public:
    queue<int> que1;
    queue<int> que2; // 辅助队列,用来备份
    /** Initialize your data structure here. */
    MyStack() {

    }

    /** Push element x onto stack. */
    void push(int x) {
        que1.push(x);
    }

    /** Removes the element on top of the stack and returns that element. */
    int pop() {
        int size = que1.size();
        size--;
        while (size--) { // 将que1 导入que2,但要留下最后一个元素
            que2.push(que1.front());
            que1.pop();
        }

        int result = que1.front(); // 留下的最后一个元素就是要返回的值
        que1.pop();
        que1 = que2;            // 再将que2赋值给que1
        while (!que2.empty()) { // 清空que2
            que2.pop();
        }
        return result;
    }

    /** Get the top element. */
    int top() {
        return que1.back();
    }

    /** Returns whether the stack is empty. */
    bool empty() {
        return que1.empty();
    }
};
  • 一个队列实现
class MyStack {
public:
    MyStack() {

    }

    void push(int x) {
        stack.push(x);
    }

    int pop() {
        int size = stack.size();
        while (--size) {
            stack.push(stack.front());
            stack.pop();
        }
        int result = stack.front();
        stack.pop();
        return result;
    }

    int top() {
        return stack.back();
    }

    bool empty() {
        return stack.empty();
    }

private:
    queue<int> stack;
};

标签:10,return,int,训练营,随想录,pop,que1,stack,empty
From: https://www.cnblogs.com/ddup-cpp/p/18106736

相关文章

  • 20211110lyxDER编码
    一、任务详情参考附件中图书p120中7.1的实验指导,完成DER编码。Name实例中,countryName改为"CN",organizationName="你的学号"commonName="你的姓名拼音"。用echo-n-e"编码">你的学号.der中,用OpenSSLasn1parse分析编码的正确性。提交编码过程文档(推荐markdown格式)。......
  • LeetCodeHot100 二叉树 94. 二叉树的中序遍历 104. 二叉树的最大深度 101. 对称二
    94.二叉树的中序遍历https://leetcode.cn/problems/binary-tree-inorder-traversal/description/?envType=study-plan-v2&envId=top-100-liked//递归//List<Integer>resList;//publicList<Integer>inorderTraversal(TreeNoderoot){//re......
  • 代码随想录算法训练营第9天 | 字符串(待补充)
    28.实现strStr()KMP算法KMP算法:字符串匹配问题,提前构建next表next表(前缀表):利用成功匹配的经验,长度为t的前后缀相匹配,next[j]=tnext表再改进:利用失败匹配的经验,如果P[j]和P[t]相等,仍然是徒劳?......
  • 【GUI软件】抖音评论采集:自动采集10000多条,含二级评论、展开评论!
    一、背景说明1.1效果演示用python开发的dy爬虫采集软件,可自动抓取抖音评论数据,并且含二级评论!为什么有了源码还开发界面软件呢?方便不懂编程代码的小白用户使用,无需安装python、无需懂代码,双击打开即用!软件界面截图:爬取结果截图:以上。1.2演示视频软件运行演示:【软件演......
  • 【洛谷P1036】 [NOIP2002 普及组] 选数
    一、题目:二、解题思路:本文章采用的解决方法是递归与DFS(深度优先搜索)。以下图是思路图:1.首先-确定位置题目说4个数字取三个数,所以考虑的只有三个位置和这三个位置分别放什么数值。从第一个位置开始放数。2.其次-开始放数分为4种可能,第一位置可以先放3,那么第二个位置......
  • MySQL数据库报错:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘
    在安装或配置MySQL数据库时,遇到错误是一个常见现象。这篇文章将详细讨论另一个常见的安装错误,包括错误的表现、产生的原因以及如何有效地解决该问题。了解这些信息可以帮助你快速定位问题所在,并采取适当的措施解决问题。错误描述一个常见的MySQL安装错误是:ERROR1045(28......
  • 力扣HOT100热题宝典--第4节
    ......
  • xz爆出10分的核弹级漏洞,开源社区的仓库都被炸没了
    这可能是2024年安全界的第一大瓜,所有观众都将是这场事件史诗级安全事件的见证者。用一句比较吸眼球的话概括这个故事。养父投毒差点毒死养子,社区委员会查封了该家的故事。漏洞影响该漏洞发生在压缩软件包xz,的CVE编号CVE-2024-3094。XZ压缩工具中被发现存在一个严重的安全漏......
  • java数据结构与算法刷题-----LeetCode1091. 二进制矩阵中的最短路径
    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846文章目录广度优先+双分裂蛇广度优先+双分裂蛇双分裂蛇:是求二维表中从起点到终点的经典思路(也是......
  • 代码随想录算法训练营第8天 | 字符串
    344反转字符串voidreverseString(vector<char>&s){chartmp; inti=0,j=s.size()-1; while(i<j) { tmp=s[i]; s[i]=s[j]; s[j]=tmp; i++;j--; }}swap库函数的实现:位运算法——按位异或s[i]^=s[j];s[j]^=s[i];s[i]^=s[j];54......