【题目】栈和队列专题

文章目录

  • 专题一:栈系列
    • 1. 中缀表达式转后缀表达式(逆波兰式)
    • 2. 有效的括号
    • 3. 用栈实现队列
    • 4. 最小栈

专题一:栈系列


1. 中缀表达式转后缀表达式(逆波兰式)


在这里插入图片描述

算法原理
在这里插入图片描述


2. 有效的括号


题目链接

算法原理

在这里插入图片描述

代码编写

class Solution 
{
public:
    bool isValid(string s) 
    {
        stack<char> st;
        for(const auto ch : s)
        {
            if(ch == '(' || ch == '[' || ch == '{') st.push(ch);
            else 
            {
                // 1、右括号多
                if(st.empty()) return false;

                char top = st.top();
                if(top == '(' && ch == ')' || top == '[' && ch == ']' || top == '{' && ch == '}') 
                    st.pop();
                else 
                    return false; // 2、括号不匹配
            }
        }

        return st.empty(); // 3、最后若栈为空,说明左括号全部正确匹配完成
    }
};

3. 用栈实现队列


题目链接

算法原理
在这里插入图片描述

代码编写

class MyQueue 
{
private:
    stack<int> st1; //负责入队列
    stack<int> st2; //负责出队列

public:
    // 构造函数,什么都不需要做
    MyQueue() 
    {}
    
    // 入队列
    void push(int x) 
    {
        st1.push(x);
    }
    
    // 出队列
    int pop() 
    {
        // 队列为空,则返回-1
        if(st1.empty() && st2.empty()) return -1;   
        // 若 st2 为空,则需要从 st1 中把元素更新过来
        if(st2.empty()) 
        {
            while(!st1.empty()) 
            {
                st2.push(st1.top());
                st1.pop();
            }
        }
        //  st2 栈顶元素即使队列的对首元素,删除即可
        int ans = st2.top();
        st2.pop();
        return ans;
    }
    
    int peek() 
    {
        // 队列为空,则返回-1
        if(st1.empty() && st2.empty()) return -1;
        // 若 st2 为空,则需要从 st1 中把元素更新过来
        if(st2.empty())
        {
            while(!st1.empty()) 
            {
                st2.push(st1.top());
                st1.pop();
            }
        }
        //  st2 栈顶元素即使队列的对首元素,返回即可
        return st2.top();
    }
    
    // 队列判空
    bool empty() 
    {
        return st1.empty() && st2.empty();
    }
};

4. 最小栈


题目链接

算法原理
在这里插入图片描述

代码编写

class MinStack 
{
private:
    stack<int> st;   //存放栈元素
    stack<int> minSt;//存放st中,最小元素序列

public:
    // 默认构造函数
    MinStack() 
    {}
    
    // 栈中插入元素
    void push(int val) 
    {
        st.push(val);
        // 1、若最小栈为空(说明是第一个插入元素),此时 val 直接入最小栈
        // 2、若最小栈不为空,则比较最小栈栈顶元素,再决定是否插入最小栈
        if(minSt.empty()) minSt.push(val);
        else
        {
            if(val <= minSt.top()) minSt.push(val);
        }
    }
    
    // 弹出栈顶元素
    void pop() 
    {
        // 若栈顶元素为栈中最小元素,则需要同步更新最小栈
        if(st.top() == minSt.top()) minSt.pop();
        // 弹出栈顶元素
        st.pop();
    }
    
    // 获取栈顶元素
    int top() 
    {
        return st.top();
    }
    
    // 获取栈中最小元素
    int getMin() 
    {
        return minSt.top();
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/216800.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

个人独立开发者能否踏上敏捷之路

很多软件开发团队都在使用Scrum、极限编程&#xff08;XP&#xff09;、看板等敏捷方法管理项目流程&#xff0c;持续迭代并更快、更高效地为客户持续交付可用的产品。除了团队&#xff0c;国内外很多个人独立开发者也在尝试将敏捷应用到自己的开发工作流程中&#xff0c;但大多…

容器重启后,Conda文件完整保存(虚拟环境、库包),如何重新安装conda并迁移之前的虚拟环境

Vim安装 容器重启后默认是vi&#xff0c;升级vim&#xff0c;执行命令 apt install -y vim安装 Anaconda 1. 下载Anaconda 其他版本请查看Anaconda官方库 wget https://mirrors.bfsu.edu.cn/anaconda/archive/Anaconda3-2023.03-1-Linux-x86_64.sh --no-check-certificate…

(C语言)水仙花数

编程找出所有的“水仙花数”&#xff0c;水仙花数是指一个三位正整数&#xff0c;其各位数字立方和等于该数字本身。例如&#xff1a;153是一个水仙花数&#xff0c;因为153112527 。 #include<stdio.h> int main() {for(int i 0;i < 10;i )for(int j 0;j < 10;…

hnust 湖科大 创业基础考察课程结课作业 创业计划书+路演PPT 资源下载

hnust 湖科大 创业基础考察课程结课作业 创业计划书 资源下载 资源详尽&#xff0c;图文并茂&#xff0c;开箱即用&#xff0c;附赠若干模板 资源预览图 创业计划书word 路演PPT 赠品 下载链接 链接&#xff1a;https://pan.baidu.com/s/1p1n6qwM5Jx6bB96ifAJmiw?pwd1111 …

你好!斐波那契查找【JAVA】

1.有幸遇见 斐波那契查找算法&#xff0c;也称黄金分割查找算法&#xff0c;是一种基于斐波那契数列的查找算法。与二分查找类似&#xff0c;斐波那契查找也是一种有序查找算法&#xff0c;但它的查找点不是中间位置&#xff0c;而是根据斐波那契数列来确定&#xff0c;因此又称…

智能优化算法应用:基于阿基米德优化算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于阿基米德优化算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于阿基米德优化算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.阿基米德优化算法4.实验参数设定5.算…

【UE5】使用场系统炸毁一堵墙

效果 步骤 1. 新建一个空白项目 2. 新建一个Basic关卡&#xff0c;然后添加一个第三人称游戏和初学者内容包到内容浏览器 3. 在场景中添加一堵墙 4. 选项模式选择“破裂” 点击新建 新建一个文件夹用于存储几何体集 点击“统一” 最小和最大Voronoi点数都设置为100 点击“破…

Navicat Premium 16.3.3 Windows x64 Crack

增强您的表现。 Navicat 16 具有许多改进和功能&#xff0c;可以满足您的数据库开发需求。凭借 100 多项增强功能和全新界面&#xff0c;您可以探索构建、管理和维护数据库的新方法。构建时考虑到可用性。 Navicat 16 引入了许多 UI/UX 改进&#xff0c;以最大限度地提高您的效…

选择排序、插入排序、希尔排序

1.选择排序 算法描述 将数组分为两个子集&#xff0c;排序的和未排序的&#xff0c;每一轮从未排序的子集中选出最小的元素&#xff0c;放入排序子集 重复以上步骤&#xff0c;直到整个数组有序 选择排序呢&#xff0c;就是首先在循环中&#xff0c;找到数组中最小的元素。在…

Ubuntu20.04使用SVN(Rabbitvcs)

原文&#xff1a;https://blog.csdn.net/u014552102/article/details/129914787 1.安装Rabbitvcs sudo apt-get install rabbitvcs-nautilus sudo reboot 安装完后&#xff0c;选中一个文件夹右键&#xff0c;即可看到相关操作&#xff0c;没有的可以重启一下。 2.添加这个p…

微服务保护

1.1.雪崩问题及解决方案 1.1.1.雪崩问题 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个其它微服务。 如图&#xff0c;如果服务提供者I发生了故障&#xff0c;当前的应用的部分业务因为依赖于服务I&#xff0c;因此也会被阻塞。此时&…

Python + Appium框架原生代码实现App自动化测试

Step1&#xff1a;首先介绍下pythonappium的框架结构 如下截图所示 . (1)&#xff1a;apk目录主要放置待测app的apk资源&#xff1b; (2)&#xff1a;config目录主要放置配置文件信息&#xff0c;包含&#xff1a;数据库连接配置、UI自动化脚本中所需的页面元素信息及app启…

根据源码梳理Redisson的可重入、锁重试以及看门狗机制原理

Redisson可重入的原理 在上篇文章中我们已经知道了除了需要存储线程标识外&#xff0c;会额外存储一个锁重入次数。那么接下来我们查看使用Redisson时&#xff0c;Redisson的加锁与释放锁流程图。 当开始获取锁时&#xff0c;会先判断锁是否存在&#xff0c;如果存在再进行判断…

unity程序中的根目录

在unity程序中如果要解析或保存文件时&#xff0c;其根目录为工程名的下一级目录&#xff0c;也就是Assets同级的目标

使用Redis构建简易社交网站(2)-处理用户关系

目的 本文目的&#xff1a;实现用户关注和取消关注功能。&#xff08;完整代码附在文章末尾&#xff09; 相关知识 在我之前的文章 《使用Redis构建简易社交网站(1)-创建用户与动态界面》中提到了如何实现简易社交网站中创建新用户和创建新动态功能。 那这篇文章将教会你掌…

代币化:2024年的金融浪潮预示着什么?

自“TradFi”领袖到加密专家&#xff0c;各方预测代币化机会高达数十万亿。虽然已有引人注目的用例&#xff0c;但与未来几年可能在链上转移的大量数字化资产相比&#xff0c;这些仅是冰山一角。 代币化何时会变为洪流&#xff1f;什么阻碍了其发展&#xff1f; 今年10月&…

网络初识:局域网广域网网络通信基础

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、局域网LAN是什么&#xff1f;二、广域网是什么&#xff1a;三. IP地址四.端口号五.认识协议5.1五元组 总结 前言 一、局域网LAN是什么&#xff1f; 局域网…

JVM简单了解内存溢出

JVM oracle官网文档&#xff1a;https://docs.oracle.com/en/java/javase/index.html 什么是JVM JVM(Java Virtual Machine)原名Java虚拟机&#xff0c;是一个可以执行Java字节码的虚拟计算机。它的作用是在不同平台上实现Java程序的跨平台运行&#xff0c;即使在不同的硬件…

【驾校管理系统源码】基于Springboot+Vue个人驾校预约管理系统

&#x1f345; 简介&#xff1a;500精品计算机源码学习 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 文末获取源码 目录 一、以下学习内容欢迎领取&#xff1a; Eclipse运行教学&#xff1a; Idea运行项目教学&#xff1a; Pycharm调试项目教学&#…

用Python手把手教你实现一个爬虫(含前端界面)

目录 前言爬虫基本原理使用Python的requests库发送HTTP请求使用BeautifulSoup库解析HTML页面使用PyQt5构建前端界面实现一个完整的爬虫程序结语 前言 随着互联网的飞速发展&#xff0c;再加上科技圈的技术翻天覆地的革新&#xff0c;互联网上每天都会产生海量的数据&#xff…