📘北尘_:个人主页
🌎个人专栏:《Linux操作系统》《经典算法试题 》《C++》 《数据结构与算法》
☀️走在路上,不忘来时的初心
文章目录
- 一、最小栈
-
- 二、栈的压入、弹出序列
-
- 三、逆波兰表达式求值
-
一、最小栈
1、题目讲解
2、思路讲解
3、代码实现
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、题目讲解
2、思路讲解
3、代码实现
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、题目讲解
2、思路讲解
3、代码实现
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();}
};