代码随想录笔记--栈与队列篇

news2024/11/25 0:31:49

1--用栈实现队列

利用两个栈,一个是输入栈,另一个是输出栈

#include <iostream>
#include <stack>

class MyQueue {
public:
    MyQueue() {}
    
    void push(int x) {
        in_stk.push(x);
    }
    
    int pop() {
        if(out_stk.empty()){
            while(!in_stk.empty()){
                out_stk.push(in_stk.top());
                in_stk.pop();
            }
        }
        int tmp = out_stk.top();
        out_stk.pop();
        return tmp;
    }
    
    int peek() {
        if(out_stk.empty()){
            while(!in_stk.empty()){
                out_stk.push(in_stk.top());
                in_stk.pop();
            }
        }
        return out_stk.top();
    }
    
    bool empty() {
        if(out_stk.empty() && in_stk.empty()) return true;
        else return false;
    }
private:
    std::stack<int> in_stk, out_stk;
};

int main(int argc, char* argv[]){
    MyQueue Queue;
    Queue.push(1);
    Queue.push(2);
    Queue.push(3);
    std::cout << Queue.pop() << std::endl;
    std::cout << Queue.peek() << std::endl;

    return 0;
}

2--用队列实现栈

主要思路:

        弹出栈顶元素时,需要将队列前 size - 1 个元素先弹出再重新加入到队列中;

#include <iostream>
#include <queue>

class MyStack {
public:
    MyStack() {}
    
    void push(int x) {
        q.push(x);
    }
    
    int pop() {
        int size = q.size();
        for(int i = 1; i <= size - 1; i++){
            q.push(q.front());
            q.pop();
        }
        int tmp = q.front();
        q.pop();
        return tmp;
    }
    
    int top() {
        int size = q.size();
        for(int i = 1; i <= size - 1; i++){
            q.push(q.front());
            q.pop();
        }
        int tmp = q.front();
        q.pop();
        q.push(tmp);
        return tmp;
    }
    
    bool empty() {
        return q.empty();
    }
private:
    std::queue<int> q;
};

int main(int argc, char* argv[]){
    MyStack stk;
    stk.push(1);
    stk.push(2);
    stk.push(3);
    std::cout << stk.pop() << std::endl;
    std::cout << stk.top() << std::endl;
    return 0;
}

3--有效的括号

主要思路:

        基于栈,遇到左括号,入栈对应的右括号。遇到右括号,判断当前栈顶元素是否与右括号相等,相等则表示之前曾遇到对应的左括号,表明匹配成功并弹出栈顶元素,否则返回 false;

        最后判断栈是否为空,即是否有未匹配的左括号;

#include <iostream>
#include <stack>
#include <string>

class Solution {
public:
    bool isValid(std::string s) {
        std::stack<char> stk;
        for(int i = 0; i < s.length(); i++){
            if(s[i] == '(') stk.push(')');
            else if(s[i] == '[') stk.push(']');
            else if(s[i] == '{') stk.push('}');
            else{
                if(stk.empty()) return false;
                else if(stk.top() != s[i]) return false;
                else stk.pop(); // 匹配
            }
        }
        return stk.empty();
    }
};

int main(int argc, char* argv[]){
    std::string test = "()[]{}";
    Solution S1;
    bool res = S1.isValid(test);
    if(res) std::cout << "true" << std::endl;
    else std::cout << "false" << std::endl;
    return 0;
}

4--删除字符串中的所有相邻重复项

主要思路:

        基于栈,遍历字符串,判断当前字符与栈顶元素是否相同,相同则弹出栈顶元素,否则入栈;

        最后遍历栈,将栈内的元素重构为字符串,需注意顺序;

#include <iostream>
#include <stack>
#include <string>

class Solution {
public:
    std::string removeDuplicates(std::string s) {
        std::stack<char> stk;
        for(int i = 0; i < s.length(); i++){
            if(stk.empty() || stk.top() != s[i]){
                stk.push(s[i]);
            }
            else{ // s[i] == stk.top()
                stk.pop();
            }
        }
        std::string res;
        while(!stk.empty()){
            res = stk.top() + res;
            stk.pop();
        }
        return res;
    }
};

int main(int argc, char* argv[]){
    std::string test = "abbaca";
    Solution S1;
    std::string res = S1.removeDuplicates(test);
    std::cout << res << std::endl;
    return 0;
}

5--逆波兰表达式求值

主要思路:

        

6--

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apollo领航官送福利啦

⭐简单说两句⭐ 作者&#xff1a;后端小知识 CSDN个人主页&#xff1a;后端小知识 &#x1f50e;GZH&#xff1a;后端小知识 &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f388;✨百度apollo介绍 全球智能驾驶产业领跑者 起源 百度…

stable diffusion实践操作-文生图

本文专门开一节写文生图相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 正文 1 liblib SD1.5底模 lora(baihuaniang_1.0) 详细信息&#xff1a; 底模&#xff1a;SD 1.5 Lora:baihuaniang_1.0 正向提示词&#xff1a; Best …

ubuntu18.04.6的安装教程

目录 一、下载并安装virtualbox virtualbox7.0.8版本的安装 二、Ubuntu的下载与安装 ubuntu18.04.6操作系统 下载 安装 一、下载并安装virtualbox VirtualBox是功能强大的x86和AMD64/Intel64虚拟化企业和家庭使用的产品。VirtualBox不仅是面向企业客户的功能极其丰富的高…

微信小程序 - 2023年最新版手机号快捷登录详细教程

前言 最近开发公司手机快捷登录的功能&#xff0c;花费了不少时间&#xff0c;这里附上详细教程。 这里以海底捞小程序的图片为例&#xff0c;如有侵权请联系小编删除。 代码如下 <button open-type"getPhoneNumber" getphonenumber"getPhoneNumber"…

自动驾驶——【规划】记忆泊车特殊学习路径拟合

1.Back ground 如上图&#xff0c;SLAM学习路线Start到End路径&#xff0c;其中曲线SDAB为D档位学习路径&#xff0c;曲线BC为R学习路径&#xff0c;曲线AE为前进档D档学习路径。 为了使其使用记忆泊车时&#xff0c;其驾驶员体验感好&#xff0c;需去除R档倒车部分轨迹&#x…

【STM32教程】第三章 使用OLED屏作为调试工具

案例代码及相关资料下载链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwdjauj 提取码&#xff1a;jauj 1 OLED调试工具 1.1对程序调试的认识与OLED简介 本章节只需要知道怎么调用封装好的驱动函数&#xff0c;用OLED屏幕来做调…

高效使用WMS仓储管理系统,需要关注这八个点

在现代供应链中&#xff0c;WMS仓储管理系统扮演着至关重要的角色。然而&#xff0c;随着供应链需求的不断增长和变化&#xff0c;实施WMS仓储管理系统面临着越来越多的挑战和要求。本文将探讨使用WMS仓储管理系统需要考虑的8大因素&#xff0c;以适应现代供应链的需求。 一、W…

我们把“高血压”小游戏真正做到了不用下载,点击即玩!!!

相信大家经常在短视频网站上刷到各种“高血压“小游戏吧&#xff0c;当你按捺不住点击&#xff0c;却发现手机上多了一大堆“流氓软件”的时候&#xff0c;血压就更高了。 但是&#xff01; 今天&#xff01; 我们把“虚假广告”做成了真实的游戏&#xff0c;并且可以轻松部署到…

在Linux服务器部署多台nginx

升级版2.0关于如何在linux服务器上布置多台nginx&#xff0c;之前吃了点苦头&#xff0c;特写文章避免重蹈覆辙。 文章目录 前言一、下载环境依赖二、安装nginx1.创建放置nginx的文件2.上传解压压缩包3.安装nginx&#xff08;关键步&#xff09; 三、启动nginx四、验证nginx是否…

R语言之数值型描述分析

文章和代码已经归档至【Github仓库&#xff1a;https://github.com/timerring/dive-into-AI 】或者公众号【AIShareLab】回复 R语言 也可获取。 在分析之前&#xff0c;先将数据集 birthwt 中的分类变量 low、race、smoke、ht 和 ui 转换成因子。 library(MASS) data(birthwt)…

固定资产管理分析怎么写?

对企业内的固定资产进行全面的统计和分析&#xff0c;包括设备、装修、维修等方面的信息&#xff0c;有助于企业进行资产管理和风险控制。  通过该软件&#xff0c;用户可以实现对资产的跟踪和管理&#xff0c;如实时监测设备的使用情况&#xff0c;提高设备利用率和维护效率…

python基础教程:深浅copy的详细用法

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 1.先看赋值运算 l1 [1,2,3,[barry,alex]] l2 l1l1[0] 111 print(l1) # [111, 2, 3, [barry, alex]] print(l2) # [111, 2, 3, [barry, alex]]l1[3][0] wusir print(l1) # [111, 2, 3, [wusir, alex]] print(l2)…

嵌入式linux轻量级sshd服务Dropbear交叉编译

下载 zlib-1.2.11.tar.gz dropbear-2020.81.tar.bz2 解压 $tar -zxvf zlib-1.2.11.tar.gz $tar -jxvf dropbear-2020.81.tar.bz2 zlib交叉编译配置 CC/usr/local/arm/network/fsl-linaro-toolchain/bin/arm-fsl-linux-gnueabi-gcc ./configure --prefix$PWD/install dro…

目录扫描+JS文件中提取URL和子域+403状态绕过+指纹识别(dirsearch_bypass403)

dirsearch_bypass403 在安全测试时&#xff0c;安全测试人员信息收集中时可使用它进行目录枚举&#xff0c;目录进行指纹识别&#xff0c;枚举出来的403状态目录可尝试进行绕过&#xff0c;绕过403有可能获取管理员权限。不影响dirsearch原本功能使用 运行流程 dirsearch进行…

LLM强势挺进端侧,AI大语言模型端侧部署如何影响超自动化?

▲ 图片由AI生成 算力资源吃紧&#xff0c;成本居高不下&#xff0c;数据隐私泄露&#xff0c;用户体验不佳…… 以OpenAI为代表的大语言模型爆发后&#xff0c;多重因素影响之下本地化部署成为LLM落地的主流模式。LLM迫切需要部署在本地设备上&#xff0c;围绕LLM端侧部署的…

财报解读:首次全口径盈利,快手深耕电商找准了发展门道?

快手成功闯过了盈利大关。 近日快手发布的Q2财报显示&#xff0c;其借助于电商“内循环”取得超预期成效&#xff0c;不仅用户数相比一季度环比净增1900万&#xff0c;再创新高&#xff0c;而且迎来了成立以来首次单季度全口径盈利。 对于快手盈利能力的大幅提升&#xff0c;…

ASCII码 对照表

总256个字符元素 0&#xff5e;255 码值整数据 字符结构 字符元素(内容) 整数结构 码值整数

【前端】Layui动态数据表格拖动排序

目录 一、下载layui-soul-table 二、使用 三、Layui实际使用 1、html代码 2、JS代码 3、PHP后台代码 目的&#xff1a;使用Layui的数据表格&#xff0c;拖动行进行排序。 使用插件&#xff1a;layui-soul-table 和 Layui 1.layui-soul-table文档&#xff1a;https://…

ZKP硬件加速

1. 引言 本文重点关注&#xff1a; 1&#xff09;何为硬件加速&#xff1f;为何需要硬件加速&#xff1f;2&#xff09;ZKP的关键计算原语&#xff1a; Multiscalar MultiplicationNumber Theoretic TransformationArithmetic Hashes 3&#xff09;所需的硬件资源4&#xff0…

vue3学习源码笔记(小白入门系列)------ 组件更新流程

目录 说明例子processComponentcomponentUpdateFnupdateComponentupdateComponentPreRender 总结 说明 由于响应式相关内容太多&#xff0c;决定先接着上文组件挂载后&#xff0c;继续分析组件后续更新流程&#xff0c;先不分析组件是如何分析的。 例子 将这个 用例 使用 vi…