文章目录
- 前言
- 一、STL栈和队列的使用
- 二、leetcode---最小栈
- 三、nowcoder---栈的压入、弹出序列
- 四、逆波兰表达式求值
- 总结
前言
C++STL的Stack的使用:STL栈和队列的使用介绍、leecode—最小栈、nowcoder—栈的压入、弹出序列等的介绍
一、STL栈和队列的使用
#include <iostream>
#include <stack>
#include <queue>
using namespace std;void test_stack_queue()
{stack<int> st;st.push(1);st.push(2);st.push(3);st.push(4);st.push(5);while (!st.empty()){cout << st.top() << " ";st.pop();}cout << endl;queue<int> q;q.push(1);q.push(2);q.push(3);q.push(4);q.push(5);while (!q.empty()){cout << q.front() << " ";q.pop();}cout << endl;}int main()
{test_stack_queue();return 0;
}
二、leetcode—最小栈
最小栈链接
class MinStack {
public:MinStack() {}void push(int val) {_st.push(val);if(_minst.empty() || val <= _minst.top()){_minst.push(val);}}void pop() {if(_minst.top() == _st.top()){_minst.pop();}_st.pop();}int top() {return _st.top();}int getMin() {return _minst.top();}
private:stack<int> _st;stack<int> _minst;
};
三、nowcoder—栈的压入、弹出序列
栈的压入、弹出序列链接
class Solution {
public:bool IsPopOrder(vector<int>& pushV, vector<int>& popV) {stack<int> st;size_t pushi = 0, popi = 0;while(pushi < pushV.size()){st.push(pushV[pushi++]);// 不匹配if(popV[popi] != st.top()){continue;}else {// 匹配while(!st.empty() && st.top() == popV[popi]){st.pop();++popi;}}}return st.empty();}
};
四、逆波兰表达式求值
逆波兰表达式求值链接
class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> st;for(auto& str : tokens){if(str == "+" || str == "-" || str == "*" || str == "/"){int right = st.top();st.pop();int left = st.top();st.pop();switch(str[0]){case '+':st.push(left + right);break;case '-':st.push(left - right);break;case '*':st.push(left * right);break;case '/':st.push(left / right);break;}}else{st.push(stoi(str));}}return st.top();}
};
思路如下:
总结
C++STL的Stack的使用:STL栈和队列的使用介绍、leecode—最小栈、nowcoder—栈的压入、弹出序列等的介绍