![](https://file.jishuzhan.net/article/1735222348031725569/fd17832af4540523a10422941b22675d.webp)
📘北尘_ :个人主页
🌎个人专栏 :《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》
☀️走在路上,不忘来时的初心
文章目录
一、最小栈
1、题目讲解
![](https://file.jishuzhan.net/article/1735222348031725569/8fa4e336ff17f0a2b5225b390de697f8.webp)
2、思路讲解
![](https://file.jishuzhan.net/article/1735222348031725569/6d72bd0b2caf40c73439e0678a95d594.webp)
3、代码实现
cpp
class MinStack {
public:
MinStack() {}
void push(int val) {
st.push(val);
if(minst.empty() || st.top()<=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();
}
stack<int> st;
stack<int> minst;
};
二、栈的压入、弹出序列
1、题目讲解
![](https://file.jishuzhan.net/article/1735222348031725569/11f4f5ec9bc5cf656487abdc260077cd.webp)
2、思路讲解
![](https://file.jishuzhan.net/article/1735222348031725569/4c3bc92369f493f829f03c27508aea40.webp)
3、代码实现
cpp
bool IsPopOrder(vector<int>& pushV, vector<int>& popV)
{
stack<int> s;
int pushi=0,popi=0;
for(auto ch:pushV)
{
s.push(pushV[pushi]);
pushi++;
while(!s.empty() && s.top()==popV[popi])
{
s.pop();
popi++;
}
}
return s.empty();
}
三、逆波兰表达式求值
1、题目讲解
![](https://file.jishuzhan.net/article/1735222348031725569/e4f40e30b7d6a2a5f9965f296418f3e4.webp)
2、思路讲解
![](https://file.jishuzhan.net/article/1735222348031725569/c4108531c350316200553f4b7f60aa2d.webp)
3、代码实现
cpp
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> s;
for(auto& ch:tokens)
{
if(ch=="+" || ch=="-" || ch=="*" || ch=="/" )
{
int right=s.top();
s.pop();
int left=s.top();
s.pop();
switch(ch[0])
{
case '+':
s.push(left+right);
break;
case '-':
s.push(left-right);
break;
case '*':
s.push(left*right);
break;
case '/':
s.push(left/right);
break;
}
}
else
{
s.push(stoi(ch));
}
}
return s.top();
}
};