news 2026/8/10 4:59:15

代码随想录算法训练营第十天| 栈与队列理论基础 | 232.用栈实现队列| 225. 用队列实现栈| 20. 有效的括号 | 1047. 删除字符串中的所有相邻重复项

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
代码随想录算法训练营第十天| 栈与队列理论基础 | 232.用栈实现队列| 225. 用队列实现栈| 20. 有效的括号 | 1047. 删除字符串中的所有相邻重复项

KEY

(1)STL有关栈和队列的函数

1>stack基础函数:

push

top:读取并返回队元素

pop:出栈栈顶元素,返回值为空

empty:返回布尔值,是否为空

size:返回元素个数


2>queue基础函数:

push

pop:出栈栈顶元素,返回值为空

front:读取并返回队首元素

back:返回队尾元素

empty:返回布尔值,是否为空

size:返回元素个数


3>string基础函数

函数用途示例
push_back(c)在末尾添加字符s.push_back('!');→ “Hello!”
pop_back()删除末尾字符s.pop_back();
front()返回第一个字符s.front();
back()返回最后一个字符s.back();
empty()判断是否为空字符串s.empty();false
clear()清空字符串s.clear();

232.用栈实现队列

(1)思路没啥,注意理清关系

思路:两个栈实现队列

(2)cppSTL有关栈的函数和相关细节

整个代码:

class MyQueue{public:stack<int>stIn;stack<int>stOut;MyQueue(){}voidpush(intx){//把数据压入stInstIn.push(x);}intpop(){//如果stOut是空的,把所有stIn的数据压入//如果不是空的,stOut.popif(stOut.empty()){while(!stIn.empty()){stOut.push(stIn.top());stIn.pop();}}intresult=stOut.top();stOut.pop();returnresult;}intpeek(){inttemp=this->pop();stOut.push(temp);returntemp;}boolempty(){returnstIn.empty()&&stOut.empty();}};

225. 用队列实现栈

思路还好,看看吧。
思路:一个队列,入栈直接加入队列,出栈先将队列除了最后一个元素出队再入队,然后出队最后一个元素

整个代码:

class MyStack{public:queue<int>que;MyStack(){}voidpush(intx){que.push(x);}intpop(){intsize=que.size();inttemp;while(size>1){temp=que.front();que.pop();que.push(temp);size--;}temp=que.front();que.pop();returntemp;}inttop(){returnque.back();}boolempty(){returnque.empty();}};

20. 有效的括号

思路还好。思路:构造一个栈放这些括号。
注意逻辑简洁的代码,如下:

整个代码:

class Solution{public:boolisValid(string s){stack<char>st;for(inti=0;i<s.size();i++){if(s[i]=='('){st.push(')');}elseif(s[i]=='['){st.push(']');}elseif(s[i]=='{'){st.push('}');}elseif((!st.empty())&&s[i]==st.top()){st.pop();}else{returnfalse;}}//需要判断栈空,才可以说是有效字符串(因为可能全是左括号,不段压入)returnst.empty();}};

1047. 删除字符串中的所有相邻重复项

(1)思路:用栈解决很方便,或者在字符串中直接模拟栈(更快)

(2)cpp关于string的函数

函数用途示例
push_back(c)在末尾添加字符s.push_back('!');→ “Hello!”
pop_back()删除末尾字符s.pop_back();
front()返回第一个字符s.front();
back()返回最后一个字符s.back();
empty()判断是否为空字符串s.empty();false
clear()清空字符串s.clear();

整个代码:

(1)栈:

class Solution{public:stringremoveDuplicates(string s){stack<char>st;for(inti=0;i<s.size();i++){if(st.empty()||s[i]!=st.top()){st.push(s[i]);}else{st.pop();}}//return the resultstring result="";while(!st.empty()){chartemp=st.top();//别忘了出栈st.pop();result+=temp;}reverse(result.begin(),result.end());returnresult;}};

(2)在字符串中模拟栈:

class Solution{public:stringremoveDuplicates(string s){string result;for(inti=0;i<s.size();i++){if(result.empty()||s[i]!=result.back()){result.push_back(s[i]);}else{result.pop_back();}}returnresult;}};



详细信息

理论基础

了解一下 栈与队列的内部实现机制,文中是以C++为例讲解的。

文章讲解:https://programmercarl.com/%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

232.用栈实现队列

大家可以先看视频,了解一下模拟的过程,然后写代码会轻松很多。

题目链接/文章讲解/视频讲解:https://programmercarl.com/0232.%E7%94%A8%E6%A0%88%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97.html

225. 用队列实现栈

可能大家惯性思维,以为还要两个队列来模拟栈,其实只用一个队列就可以模拟栈了。

建议大家掌握一个队列的方法,更简单一些,可以先看视频讲解

题目链接/文章讲解/视频讲解:https://programmercarl.com/0225.%E7%94%A8%E9%98%9F%E5%88%97%E5%AE%9E%E7%8E%B0%E6%A0%88.html

20. 有效的括号

讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。

大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。

题目链接/文章讲解/视频讲解:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B7.html

1047. 删除字符串中的所有相邻重复项

栈的经典应用。

要知道栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了 遍历数组当前元素时候,前一个元素是什么。

题目链接/文章讲解/视频讲解:https://programmercarl.com/1047.%E5%88%A0%E9%99%A4%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E7%9B%B8%E9%82%BB%E9%87%8D%E5%A4%8D%E9%A1%B9.html

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 15:33:13

Sophia路线图深度解读:下一代AI智能体功能预览与发展方向

Sophia路线图深度解读&#xff1a;下一代AI智能体功能预览与发展方向 【免费下载链接】sophia TypeScript AI platform with AI chat, Autonomous agents, Software developer agents, chatbots and more 项目地址: https://gitcode.com/gh_mirrors/sophi/sophia Sophia…

作者头像 李华
网站建设 2026/7/14 15:33:12

COVID-Net vs 传统检测方法:为什么开源AI是未来医疗的关键

COVID-Net vs 传统检测方法&#xff1a;为什么开源AI是未来医疗的关键 【免费下载链接】COVID-Net COVID-Net Open Source Initiative 项目地址: https://gitcode.com/gh_mirrors/co/COVID-Net 在全球医疗健康领域&#xff0c;快速准确的疾病诊断一直是医护人员面临的重…

作者头像 李华
网站建设 2026/7/14 15:33:11

是德科技MXR604A MXR608A MXR254A MXR258A示波器

MXR604A 并不是一个“系列”&#xff0c;而是 Keysight&#xff08;是德科技&#xff09;Infiniium MXR 系列中的一个具体型号‌。根据权威公开资料&#xff0c;MXR604A 是该系列中具有以下核心特性的单一款式示波器&#xff1a; ‌带宽‌&#xff1a;6 GHz ‌通道数‌&#xf…

作者头像 李华